【发布时间】:2014-09-03 14:56:52
【问题描述】:
更新:我应该注意到NavigationPropertyClass 上的Id 属性不是数据库生成的。在我的实际模型中,NavigationPropertyClass 也是层次结构方案(使用 TPH)的一部分,此处未显示,而NavigationPropertyClass 有一个DerivedClass1 实例和DerivedClass2 实例的集合,这不一定是从派生NavigationPropertyClass 的基类继承的所有类的情况。
我的模型的一部分看起来像这样(为简洁起见,省略了其他属性和构造函数):
//Many other classes inherit from this class
//and many of the derived classes are not composed of DerivedClass1 or DerivedClass2
public abstract SomeOtherBaseClass{
public int Id {get; set;} //not database generated, set in the constructor
}
public NavigationPropertyClass: SomeOtherBaseClass{
public DerivedClass1 Derived1 {get; set;}
public virtual ICollection<DerivedClass2> Derived2Collection {get; set;}
}
public abstract class BaseClass{
public int Id {get; set;}
//other properties shared by derived classes
}
public class DerivedClass1: BaseClass{
public NavigationPropertyClass NavigationProperty {get; set;}
//other properties pertinent to DerivedClass1
}
public class DerivedClass2: BaseClass{
public NavigationPropertyClass NavigationProperty {get; set;}
//other properties pertinent to DerivedClass2
}
DerivedClass1 与NavigationPropertyClass 是一对一关系,而DerivedClass2 与NavigationPropertyClass 是多对一关系。
我正在尝试在每个派生类中设置识别关系,以便当NavigationPropertyClass 的实例从数据库中删除时,DerivedClass1 的关联实例和DerivedClass2 的任何实例也将如此.我可以看到设置它的唯一方法是使用 TPT 继承,但即便如此,我也无法让事情正常工作。我会发布我的 Fluent API 配置,但此时我已经尝试了很多排列,以至于我不知道该发布哪一个。
有什么办法可以做我想做的事吗?如果是这样,Fluent API 配置是什么样的?
【问题讨论】:
-
虽然 Derived2 与 NavigationPropertyClass 有一对多的关系 => 一个 Derived2 有多个 NavigationPropertyClass ?
-
@YuliamChandra 已编辑以正确识别关系的方向。
-
EF 不必知道
Base,可以将派生类映射为独立实体。
标签: c# entity-framework entity-framework-6.1 ef-fluent-api