我的理解是[NotMapped]属性直到EF 5(目前在CTP中)才可用,所以我们不能在生产中使用它。
我如何在EF 4.1标记属性被忽略?
更新:我还注意到一些奇怪的事情。我得到了[NotMapped]属性工作,但出于某种原因,EF 4.1仍然在数据库中创建了一个名为dispose的列,即使公共bool dispose {get;私人设置;}用[NotMapped]标记。类当然实现了IDisposeable,但我不认为这有什么关系。任何想法吗?
我的理解是[NotMapped]属性直到EF 5(目前在CTP中)才可用,所以我们不能在生产中使用它。
我如何在EF 4.1标记属性被忽略?
更新:我还注意到一些奇怪的事情。我得到了[NotMapped]属性工作,但出于某种原因,EF 4.1仍然在数据库中创建了一个名为dispose的列,即使公共bool dispose {get;私人设置;}用[NotMapped]标记。类当然实现了IDisposeable,但我不认为这有什么关系。任何想法吗?
当前回答
从EF 5.0开始,您需要包含System.ComponentModel.DataAnnotations.Schema命名空间。
其他回答
可以使用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命名空间中。
你也可以在你的DBContext类中使用Fluent API重写onmodelcreation函数:
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。网络核心(2.0)
数据注释
如果你正在使用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; }
}
从EF 5.0开始,您需要包含System.ComponentModel.DataAnnotations.Schema命名空间。