C# 实体框架6:忽略所有派生类型的basetype属性

C# 实体框架6:忽略所有派生类型的basetype属性,c#,.net,entity-framework-6,odata,C#,.net,Entity Framework 6,Odata,我需要忽略抽象类BaseEntity上的属性State,但是如果不使用[NotMappedAttribute],我就无法实现这一点,但是如果我使用该属性,该属性在ODataAPI中也会被忽略 我已经在这里建立了一个github项目来测试这一点: 继承链: public abstract class BaseEntity { [Key] public int ID { get; set; } [Timestamp] public byte[] Rowversio

我需要忽略
抽象类BaseEntity
上的属性
State
,但是如果不使用
[NotMappedAttribute]
,我就无法实现这一点,但是如果我使用该属性,该属性在ODataAPI中也会被忽略

我已经在这里建立了一个github项目来测试这一点:

继承链:

public abstract class BaseEntity
{
    [Key]
    public int ID { get; set; }

    [Timestamp]
    public byte[] Rowversion { get; set; }

    public State State { get; set; }
}

[Table("Events")]
public abstract class Event : BaseEntity
{
    public int PersonID { get; set; }

    public string EventName { get; set; }

    public virtual Person Person { get; set; }
}

public class DerivedEvent1 : Event
{
    public bool IsDerivedEvent1 { get; set; }
}

public class DerivedEvent2 : Event
{
    public bool IsDerivedEvent2 { get; set; }
}
属性

使用
[NotMappedAttribute]
时,所有类型的
状态
属性都会被正确忽略,迁移运行正常,但这也会从ODataAPI中删除该属性,这是我们不希望看到的

因为我们需要ODataAPI中的
State
属性,所以我们使用的不是
[NotMappedAttribute]
,而是fluent配置

流畅的配置:

modelBuilder.Types<BaseEntity>().Configure(clazz => clazz.Ignore(prop => prop.State));

add-migration Initial -Force
modelBuilder.Types().Configure(clazz=>clazz.Ignore(prop=>prop.State));
添加迁移初始-强制
导致此错误的原因:

无法对类型“EntityFrameworkIgnorPerty.Models.DerivedEvent1”的属性“State”使用Ignore方法,因为此类型继承了映射此属性的类型“EntityFrameworkIgnorPerty.Models.BaseEntity”。要从模型中排除此属性,请对基类型使用NotMappeAttribute或Ignore方法

我需要让它与Fluent api一起工作,我需要同时对所有派生类型的
BaseEntity
执行此操作


在我的实际项目中,我有100多个实体,我不能手工为每个实体做这件事,特别是考虑到未来的发展。

这个问题似乎与这样一个事实有关,即直接或间接继承
BaseEntity
的每个类调用
类型
方法体,这会导致EF继承出现问题

您可以使用筛选器将配置仅应用于以下直接派生类型:

modelBuilder.Types<BaseEntity>()
    .Where(t => t.BaseType == typeof(BaseEntity))
    .Configure(clazz => clazz.Ignore(prop => prop.State));
modelBuilder.Types()
其中(t=>t.BaseType==typeof(BaseEntity))
.Configure(clazz=>clazz.Ignore(prop=>prop.State));

是否将
BaseEntity
类映射为实体(即参与EF继承)?否
BaseEntity
未映射为单独的实体。在本例中,只有事件应该映射为具有TPH的实体!我知道我以前就有过这个问题,但我记不起是什么问题了。。不管怎样……这似乎解决了我所有的问题!