【问题标题】:How to insert data in 1..1 relationship C#如何在1..1关系C#中插入数据
【发布时间】:2017-10-29 17:27:02
【问题描述】:

所以,我有两个表:Employee 和 Address。每个员工都必须有一个地址。

EmployeeId是Employee表中的PK,是Identity和自增 AddressId是Address表中的PK,是Identity,自增

当我想创建新记录时,我收到 A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column:

我浪费了一整天,仍然不知道如何解决它。另外,我是数据库编程的初学者。我正在使用实体框架和 C#:

我正在上传图片以获取更多信息:

enter image description here

enter image description here

enter image description here

【问题讨论】:

  • 所以我先尝试添加地址,然后添加员工,仍然是同样的错误。
  • 您的错误是说您无法计算/设置 FK,因为它是数据库生成的。通常一对一的关系是糟糕的设计。您可以做的是设置一个额外的 FK,从一列中删除身份映射或使用事务同时设置两者。教程entityframeworktutorial.net/… 正在使用我认为的事务方法 - 我怀疑他们使用身份插入,但是这也需要使用事务。

标签: c# entity-framework relationship sql-insert


【解决方案1】:

这是因为表中的外键放置错误。

关系中的 Chrck 尤其是外键。删除架构。您需要更新 EDMX 文件(还不足以从模型中“刷新”表格,您需要在模型中删除并再次添加表格)。

【讨论】:

    【解决方案2】:

    1..1 关系在关系数据库中实际上是不可能的。问题是没有插入不违反其他外键的实体的顺序。如果先插入员工,地址还不存在,但没有员工就不能插入地址。

    因此,我对您的确切问题的建议是将其更改为 0-1..1 关系。每个员工必须有一个地址,但您并不真的需要该员工的地址。然后先插入地址,分配给员工,然后再插入员工。然后保存在一笔交易中。

    个人建议:如果您的关系确实是 1..1,则没有理由将其拆分为两个表。表和关系的重点是避免冗余。但是,MUST 有员工的地址表无论如何都不能用于其他任何事情,因此您不妨将地址列添加到员工表中。这不仅有效,而且速度更快。

    数据库设计和类设计最佳实践并不相同。在 C# 中应该分成两个类的可能是一个表,反之亦然。

    【讨论】:

    • 那我该怎么办? :D
    • 您是否因为其他原因需要两张表?使用 0-1 .. 1,否则使用单个表。
    【解决方案3】:

    我更改了地址表 AddressId 上的 IsIdentity,但仍然是主键。这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多