Обновление: Я должен был заметить, что свойство Id
на NavigationPropertyClass
не создано в базе данных. В моей фактической модели NavigationPropertyClass
также является частью схемы иерархии (с использованием TPH), которая здесь не показана, а в то время как NavigationPropertyClass
имеет экземпляр DerivedClass1
и набор из DerivedClass2
экземпляров, это не обязательно в случае всех классов, которые наследуют от базовый класс, из которого получается NavigationPropertyClass
.Структура сущностей 6.1: 1-1 и отношение 1-много в производных типах и идентифицирующие отношения
Часть моей модели выглядит примерно так (другие свойства и конструкторы для краткости опускаем):
//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
имеет 1-1 отношения с NavigationPropertyClass
, в то время как DerivedClass2
имеет много-1 отношения с NavigationPropertyClass
.
Я пытаюсь установить идентификационные отношения в каждом из производных классов, так что, когда экземпляр NavigationPropertyClass
будет удален из базы данных, также будет связан соответствующий экземпляр DerivedClass1
и любые экземпляры DerivedClass2
. Единственный способ, которым я могу это понять, - это наследование TPT, но даже в этом случае я не могу нормально работать. Я бы опубликовал свою конфигурацию Fluent API, но на данный момент я пробовал так много перестановок, что не знаю, какой из них следует публиковать.
Есть ли способ сделать то, что я пытаюсь сделать? Если да, то как выглядит API Fluent API?
_while Derived2 имеет отношения 1-много с NavigationPropertyClass_ => В One Derived2 есть много NavigationPropertyClass? –
@YuliamChandra отредактирован, чтобы правильно определить направление отношений. – joelmdev
EF не должен знать 'Base', вы можете сопоставить производные классы как независимые объекты. –