我的理解是,在{5}目前使用CTP之前,[NotMapped]
属性不可用,因此我们无法在生产中使用它。
如何将EF 4.1中的属性标记为忽略?
更新:我注意到其他一些奇怪的事情。我得到了[NotMapped]
属性,但出于某种原因,即使public bool Disposed { get; private set; }
标有[NotMapped]
,EF 4.1仍会在数据库中创建一个名为Disposed的列。该课程当然实现IDisposeable
,但我不知道这应该如何重要。有什么想法吗?
答案 0 :(得分:556)
您可以使用NotMapped
属性数据注释来指示Code-First排除特定属性
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
命名空间中。
您也可以使用Fluent API
类中的OnModelCreating
重写DBContext
函数执行此操作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(t => t.LastName);
base.OnModelCreating(modelBuilder);
}
http://msdn.microsoft.com/en-us/library/hh295847(v=vs.103).aspx
我检查的版本是EF 4.3
,这是使用NuGet时可用的最新稳定版本。
修改: 2017年9月
数据注释
如果您使用的是asp.net核心(在撰写本文时 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; }
}
Fluent 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; }
}
答案 1 :(得分:33)
从EF 5.0开始,您需要包含System.ComponentModel.DataAnnotations.Schema
命名空间。