如何使用 codefirst EF4 制作非持久属性?
MS 说有一个 StoreIgnore 属性,但我找不到它。
有没有办法使用 EntityConfiguration 进行设置?
如何使用 codefirst EF4 制作非持久属性?
MS 说有一个 StoreIgnore 属性,但我找不到它。
有没有办法使用 EntityConfiguration 进行设置?
在 EF Code-First CTP5 中,可以使用[NotMapped]
注解。
using System.ComponentModel.DataAnnotations;
public class Song
{
public int Id { get; set; }
public string Title { get; set; }
[NotMapped]
public int Track { get; set; }
目前,我知道两种方法。
将“动态”关键字添加到属性中,这会阻止映射器对其进行持久化:
private Gender gender;
public dynamic Gender
{
get { return gender; }
set { gender = value; }
}
覆盖 DBContext 中的 OnModelCreating 并重新映射整个类型,省略您不想保留的属性:
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().MapSingleType(p => new { p.FirstName, ... });
}
使用方法 2,如果 EF 团队引入 Ignore,您将能够轻松将代码更改为:
modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
如果你不想使用 Annotations,你可以使用Fluent API。覆盖OnModelCreating
并使用 DbModelBuilder 的Ignore()
方法。假设您有一个“歌曲”实体:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore);
}
}
您还可以使用 EntityTypeConfiguration将配置移动到单独的类中以获得更好的可管理性:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SongConfiguration());
}
}
public class SongConfiguration : EntityTypeConfiguration<Song>
{
public SongConfiguration()
{
Ignore(p => p.PropToIgnore);
}
}
使用 System.ComponentModel.DataAnnotations 添加。 模型类的架构。(必须包括“SCHEMA”)
将 [NotMapped] 数据注释添加到您希望保留的字段(即不保存到数据库)。
这将防止它们作为列添加到数据库中的表中。
请注意 - 以前的答案可能包含这些位,但它们没有完整的“使用”子句。他们只是放弃了“模式”——在该模式下定义了 NotMapped 属性。