【发布时间】:2016-01-21 21:23:38
【问题描述】:
我在这里有一个错误,无法完全理解其背后的逻辑。我正在使用具有模型优先方法的实体框架 6。我设计了两个相互引用的表格,如下所示:
基本上,帐户需要在公司中,而公司必须有帐户作为管理员。但是,我收到来自 EF 验证器的错误:
错误 3014:从第 224、249 行开始映射片段时出现问题:未在模型中强制执行从表 CompaniesSet (Id) 到表 AccountsSet (Id) 的外键“外键约束“CompaniesAccounts1”。需要创建关联或继承关系来强制执行此约束。
CompaniesAccounts1 是您在此处看到的第一个关联 (1...*),Accounts 是主体。第二个关联以Companies 为主体。有人知道我为什么会收到此错误吗?
所有 4 个属性都是不可为空的 Int32 类型。
【问题讨论】:
-
从关系的角度来看,您在这里尝试做的事情是不可能的。至少其中一个属性必须可以为空。你在这里创造了一个先有鸡还是先有蛋的问题。您需要公司记录才能将管理员帐户附加到,但您需要将该帐户的帐户记录分配为公司记录中的管理员帐户。
-
好的,我将 CompanyId 更改为可为空,并将第二个关系分别更改为 * 和 0..1。我仍然得到错误。我还缺少什么吗?
-
嗯,很奇怪。我检查了设计器 xml 文件,发现一些来自关联的工件不再存在。删除这些,sql 文件和 Model.Context.tt 和 Model.tt 后,它自己整理出来。我现在在一个关联上得到 0..1 和 *,在另一个关联上得到 * 和 0...1。
标签: c# entity-framework-6 ef-model-first