更新:我应该注意到NavigationPropertyClass
上的Id
属性不是数据库生成的。在我的实际模型中,NavigationPropertyClass
也是层次结构方案(使用TPH)的一部分,此处未显示,而NavigationPropertyClass
有DerivedClass1
实例和DerivedClass2
实例的集合,但并非所有类都必须从基类从NavigationPropertyClass
派生。实体框架6.1:派生类型和标识关系中的1-1和1-many关系
我的模型的一部分看起来像这样(其他属性和构造函数为简洁起见省略):
//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
1-1关系,同时DerivedClass2
具有许多-1与NavigationPropertyClass
的关系。
我试图在每个派生类中设置标识关系,以便当NavigationPropertyClass
的实例从数据库中删除时,DerivedClass1
的相关实例以及DerivedClass2
的任何实例也将被删除。我可以看到设置的唯一方法是使用TPT继承,但即便如此,我也无法使事情正常工作。我会发布我的Fluent API配置,但我在这一点上尝试了很多排列,我不知道应该发布哪一个。
有没有办法做我想做的事情?如果是这样,Fluent API配置是什么样的?
_ Derived2与NavigationPropertyClass_ =具有一对多的关系一个Derived2有很多NavigationPropertyClass? – 2014-09-03 15:06:21
@YuliamChandra编辑,以正确识别关系的方向。 – joelmdev 2014-09-03 15:39:24
EF不必知道'Base',你可以将派生类映射为独立的实体。 – 2014-09-03 20:18:42