首先忽略 EF 代码中所有继承对象中的属性

Mas*_*oud 5 c# inheritance entity-framework .net-4.0 ef-code-first

我的 EF 代码第一个模型中的所有实体都有以下抽象基类:

public abstract class BaseEntity
{
  public Id {get; set;}  
  public bool IsDeleted {get; set;}  
  ...
}
Run Code Online (Sandbox Code Playgroud)

我在我DbContextOnModelCreating()方法中编写了以下代码来忽略IsDeleted

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...
        modelBuilder.Types().Configure(c => c.Ignore("IsDeleted"));
        ...
    }
Run Code Online (Sandbox Code Playgroud)

但是当它导致以下错误时:

您不能在类型“MyEntity”上的属性“IsDeleted”上使用忽略方法,因为此类型继承自映射此属性的类型“BaseEntity”。要从模型中排除此属性,请在基类型上使用 NotMappedAttribute 或 Ignore 方法。

我正在使用.NET 4所以我不能[NotMappedAttribute]用来 ignore IsDeleted,所以我使用了以下代码:

public partial class BaseEntity_Mapping : EntityTypeConfiguration<BaseEntity> 
{
    public BaseEntity_Mapping()
    {
        this.HasKey(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.Ignore(t => t.IsDeleted);
    }
}
Run Code Online (Sandbox Code Playgroud)

并将OnCreatingModel()方法更新为:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    ...
    modelBuilder.Configurations.Add(new BaseEntity_Mapping());
    modelBuilder.Types().Configure(c => c.Ignore("IsDeleted"));
    ...
}
Run Code Online (Sandbox Code Playgroud)

但问题仍然存在。有什么想法吗?

Dab*_*rnl 3

这是实体框架 5 中已确认的错误。请参阅此链接

它应该已在 EF6 中修复。解决方法:设为IsDeleted只读并提供一个SetIsDeleted(bool value)函数。

  • 这在 6.1.3 中似乎仍然是一个问题。 (3认同)