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的实体!我知道我以前就有过这个问题,但我记不起是什么问题了。。不管怎样……这似乎解决了我所有的问题!