我的理解是,该[NotMapped]属性直到CTP中的EF 5才可用,因此我们不能在生产中使用它。
[NotMapped]
如何在EF 4.1中标记要忽略的属性?
更新: 我注意到其他奇怪的事情。我可以使用该[NotMapped]属性,但是由于某些原因,即使使用public bool Disposed { get; private set; }标记为,EF 4.1仍会在数据库中创建一个名为Disposed的列[NotMapped]。IDisposeable当然,该类实现了,但我不认为这应该有多重要。有什么想法吗?
public bool Disposed { get; private set; }
IDisposeable
您可以使用NotMapped属性数据注释来指示Code-First排除特定属性
NotMapped
public class Customer { public int CustomerID { set; get; } public string FirstName { set; get; } public string LastName{ set; get; } [NotMapped] public int Age { set; get; } }
[NotMapped]属性包含在System.ComponentModel.DataAnnotations名称空间中。
System.ComponentModel.DataAnnotations
您也可以在类中使用Fluent API覆盖OnModelCreating函数来执行此操作DBContext:
Fluent API
OnModelCreating
DBContext
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Customer>().Ignore(t => t.LastName); base.OnModelCreating(modelBuilder); }
http://msdn.microsoft.com/zh- CN/library/hh295847(v=vs.103).aspx
我检查的版本是 EF 4.3,这是使用NuGet时可用的最新稳定版本。
EF 4.3
编辑 : 2017年9月
数据注解
如果您正在使用asp.net core( 在撰写本文时为2.0 ),则该 [NotMapped]属性可以在属性级别上使用。
public class Customer { public int Id { set; get; } public string FirstName { set; get; } public string LastName { set; get; } [NotMapped] public int FullName { set; get; } }
流利的API
public class SchoolContext : DbContext { public SchoolContext(DbContextOptions<SchoolContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Customer>().Ignore(t => t.FullName); base.OnModelCreating(modelBuilder); } public DbSet<Customer> Customers { get; set; } }