我的理解是[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命名空间。