【问题标题】:Entity Framework One-To-One Mapping Issues实体框架一对一映射问题
【发布时间】:2018-06-21 19:17:41
【问题描述】:

使用 VS 2010 beta 2,ASP.NET MVC。

我尝试创建一个实体框架文件并从我的数据库中获取数据。

关系存在一些问题,所以我开始调整周围的东西,但对于简单的一对一关系,我不断收到以下错误

错误 1 ​​错误 113:多重性在关系“FK_UserProfiles_Users”中的角色“UserProfile”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是*。我的实体.edmx 2024

我的用户表包含与其他表的一些其他多对多关系,但是当我尝试与其他表建立一对一关系时,会弹出该错误。

用户表

  • 用户 ID
  • 用户名
  • 电子邮件

等等。

用户配置文件表

  • 用户配置文件ID
  • UserID(用户表的 FK)
  • 位置
  • 生日

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    对于一对一关系,EF 期望表使用相同的主键。真的,如果这是真正的一对一,他们可能应该。因此,在您的示例中,如果您将 UserID 作为 UserProfiles 表上的主键,那么您的一对一将起作用。

    【讨论】:

    • 我在尝试在主表和扩展表之间设置 0..1 对 1 关系时遇到了这个问题。扩展表和很多其他关系一样,所以我不想弄乱那个的PK。任何想法如何解决这种情况?
    • @junior:这是一个外键关系,您可以通过选择关系、进入属性并更改“End1 Multiplicity”和“End2 Multiplicity”设置(不确定这是否是 VS不过,仅限 2010 年)。您很可能会将“End2 Multiplicity”设置为“0..1”。
    • 没有“应该”,即使 EF 无法正确处理正常的 RA 多重性并因此强制更改完美的 RA 设计。这并不暗示模型应该改变,当前情况除外 - 意味着 EF,而且它今天似乎仍然损坏,应该修复以正确建模 RA 数据库域。
    • 我的回复非常谨慎,我支持“可能应该”(我同意回避绝对和禁止,这就是我在此类事情上小心的原因)。也就是说,我同意如果 EF 适应用例而不要求它使用相同的密钥,那将是一个好处。
    • 强调很重要。 “应该”是 EF 限制的过滤(这是非常严重的,因为它尊重 PK 的基数),而不是 RA 或其 SQL 实现。虽然我同意这种情况可能导致简单的模式更改,但这并不总是可行的 - 或者考虑到 FD 是正确的。即使提供了有效的 FK,弯曲到 EF 的方法也可以避免大量的 RA。
    【解决方案2】:

    我有一个类似的问题,但有一个销售和临时场景。

    没有销售也可以存在临时工,没有临时工也可以有销售。这意味着我有 0 或 10 或 1 的关系。

    Layby引用sale,但是layby不能使用Sale的主键,Sale也不能使用Layby的主键。

    我通过使用 0 或 1ma​​ny 关系解决了这个问题,将销售中的 'Laybys' getter 和 setter 配置为私有,然后提供我自己的我的 POCO 中的“Layby”getter 和 setter。

    【讨论】:

    • 我很好奇,你有没有找到更好的方法来捕捉这种关系?
    【解决方案3】:

    为两列 UserProfileID 和 UserID 设置复合主键

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 2011-07-07
      • 2014-01-07
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多