在实体框架4.1代码优先中忽略类属性

我的理解是,[NotMapped]属性直到EF 5才可用,目前在CTP中,所以我们不能在生产中使用它。

我如何在EF 4.1标记属性被忽略?

我还注意到一些奇怪的事情。我得到了[NotMapped]属性工作,但出于某种原因,EF 4.1仍然在数据库中创建了一个名为dispose的列,即使public bool Disposed { get; private set; }被标记为[NotMapped]。这个类当然实现了IDisposeable,但我不明白这有什么关系。任何想法吗?

268376 次浏览

可以使用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 namespace中。

你也可以在你的DBContext类中使用Fluent API覆盖OnModelCreating函数:

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时可用的最新稳定版本。


__abc0: __abc1

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命名空间。