如何不坚持属性EF4代码第一?

如何使用codefirst EF4创build非持久性属性?

MS说有一个StoreIgnore属性,但我找不到它。

http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx

有没有办法使用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; } 

目前,我知道有两种方法可以做到这一点。

  1. 将“dynamic”关键字添加到属性中,该属性将停止映射器的持久化:

     private Gender gender; public dynamic Gender { get { return gender; } set { gender = value; } } 
  2. 在DBContext中重写OnModelCreating并重新映射整个types,省略不想保留的属性:

     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(); 

我不确定这是否可用。

在这个MSDN页面上 ,忽略属性和API被描述,但在下面,在评论中,有人在2010年6月4日写道:

您将能够忽略下一代Code First版本中的属性,

如果您不想使用注释,则可以使用Fluent API 。 重写OnModelCreating并使用DbModelBuilder的Ignore()方法。 假设你有一个“歌”实体:

 public class MyContext : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore); } } 

您还可以使用EntityTypeConfiguration 将configuration移动到单独的类以实现更好的可pipe理性:

 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属性。