忽略Entity Framework 4.1 Code First中的类属性

时间:2012-04-30 14:18:48

标签: c# .net entity-framework ef-code-first entity-framework-4.1

我的理解是,在{5}目前使用CTP之前,[NotMapped]属性不可用,因此我们无法在生产中使用它。

如何将EF 4.1中的属性标记为忽略?

更新:我注意到其他一些奇怪的事情。我得到了[NotMapped]属性,但出于某种原因,即使public bool Disposed { get; private set; }标有[NotMapped],EF 4.1仍会在数据库中创建一个名为Disposed的列。该课程当然实现IDisposeable,但我不知道这应该如何重要。有什么想法吗?

2 个答案:

答案 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 Core(2.0)

数据注释

如果您使用的是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命名空间。