C# 向下投射对象而不在EF中复制

C# 向下投射对象而不在EF中复制,c#,.net,inheritance,entity-framework-6,C#,.net,Inheritance,Entity Framework 6,我有一个数据库,它将把我们项目中的所有活动记录到非常具体的事件中——因此,每天都会创建一组记录。由于我希望最小化DB大小,我通过使用NotMapped注释标记所有条目子类来摆脱Discrimintor列。例如: 我有两门课: public class Base { public virtual void Validate(){return; }; } [NotMapped] public class Derived:Base { public override void Val

我有一个数据库,它将把我们项目中的所有活动记录到非常具体的事件中——因此,每天都会创建一组记录。由于我希望最小化DB大小,我通过使用NotMapped注释标记所有条目子类来摆脱Discrimintor列。例如:

我有两门课:

public class Base {
    public virtual void Validate(){return; };
}

[NotMapped]
public class Derived:Base {
    public override void Validate(){DoSomethingWithData(); return; };
}

这一切都很好,我没有鉴别器列,但这里的陷阱。对于每个派生类,我都有一个不同的Validate()方法(类和数据非常复杂)。解析数据时,我创建一个子类,填写数据列表,运行Validate()函数,如果返回true,我想向数据库添加一个Base对象。现在EF不允许我这样做,因为它仍然将对象检测为子对象(它确实在下面,但仍然)。我得到一个异常,告诉我没有找到子类的映射数据,并且插入失败。有没有办法避免将子对象深入复制到新的基本对象中?

这听起来是修改实体模型的一个不错的选择,但如果不了解更多关于如何定义实体的信息,我不确定(因此只能进行注释而不是回答!)基类是否是需要保存的事件实体?如果只存储基类所需的数据,或者将派生实体的所有数据存储在其他表中,那么您打算如何从数据库中检索派生实体?Hello@GrahamHarper,让我再解释一下。基类包含一些常见的元数据,比如什么时候、谁和什么,后者被枚举简化为一个整数值。事件的所有其他内容都存储在元数据对象列表中,这些对象本质上是键值对。原因在于以后使用这些数据进行分析,我就不说了。子级包含的唯一内容是Validate()函数重写,用于在插入之前检查列表中是否存在事件类型的正确元数据。基本上,我使用类而不是一个巨大的开关。