我对如何在实体框架中建模我的关系感到困惑。
我想ClassA
有选择地指向一个ClassB
. 这听起来有点像可选的一对一关系。
我还想ClassB
始终指向指向它的 ClassA。我还希望允许多个ClassB
's 指代同一个ClassA
。这听起来像是一对多的关系。
最好将其建模为一种关系,还是真的是两种完全独立的关系?
如果是两个关系,它们是否可以共享出现在 ClassB 上用于引用的单个属性“ClassAKey” ClassA
?
在我的问题中,我很清楚我希望我的 OM 是什么:
ClassA
{
[Key]
int Key { get; set; }
ClassB Maybe { get; set; }
int MaybeKey { get; set; }
}
ClassB
{
[Key]
int Key { get; set; }
ClassA Always { get; set; }
int AlwaysKey { get; set; }
}
我也很清楚数据库中应该是什么样子:应该只有一个ClassAKey
列 forClassB
和一个ClassBKey
for 列,ClassA
以便每个列可以相互引用,以及这些列上的外键关系。
但是......我不清楚在 EF 中对此进行建模的方法是什么。事实上,似乎我一定做错了什么!如果我只是从上面的代码开始,我会得到一个错误。
Unable to determine the principal end of an association between the types 'ClassA' and 'ClassB'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.
如果我尝试像这样配置它,
modelBuilder.Entity<ClassA>()
.HasOptional(a => a.Maybe)
.WithRequired(b => b.Always);
由于某种原因,我在 ClassB 具有错误外键属性的地方生成了看起来像错误的设计器代码
.ForeignKey("dbo.ClassAs", t => t.Key)
它应该是 t.AlwaysKey,对吧?这是怎么回事!?