【问题标题】:How to map foreign keys in two entities referencing each other如何在相互引用的两个实体中映射外键
【发布时间】: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


【解决方案1】:

由于 AgapwIesu 的评论,我想出了以下解决方案:

奇怪的是,我注意到了,因为我已经这样尝试过,但仍然出现上述错误。在翻遍了实体模型的xml文件之后,我发现了一些我不再使用的旧引用。所以他们弄乱了我现有的模型。在删除这些和生成的文件/数据库脚本并重建所有内容后,它就可以工作了。

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 2012-05-12
    • 2011-07-18
    • 2020-04-28
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多