【问题标题】:Entity Framework Cardinality Issue on a 0...1 Association0...1 关联的实体框架基数问题
【发布时间】:2012-04-11 15:31:53
【问题描述】:

我有如下所示的数据库表:

Task 可以映射到 Module,或者根本不映射 (0...1)。我首先使用 Entity Framework 数据库,当我从数据库生成模型时,Task 实体通过 Modules 作为集合(0 个或更多)。所以我打开了我的 EDMX 并将 Task 上的“模块”导航属性更改为 0...1。

现在,当我尝试编译时,我得到了这个错误:

错误 3003:从第 1241 行开始映射片段时出现问题:鉴于 Association End Member Task 的基数,它应该映射到表 TaskModule 的关键列。要么修复映射,要么改变这一端的多样性。

我不明白我需要做什么来解决这个问题。我查看了关联详细信息,但看不到问题所在。我知道我可能错过了一些愚蠢的东西,但我完全被困住了。关联属性:

Visual Studio 2010 SP1、实体框架 4.3.1.0、SQL Server 2008 R2。

【问题讨论】:

    标签: entity-framework model-associations entity-framework-4.3 cardinality


    【解决方案1】:

    一种方法是重新定义 TaskModule 表的主键。而不是主键是(TaskId,ModuleName),它需要只是(TaskId)。然后从数据库中更新模型并手动更改未从该更新中获取的任何关联。

    【讨论】:

    • 没有任务模块表。 ModuleName 应该是 Task 中可以为空的外键
    • @Raphaël Althaus 在我看来这是一个哲学答案(即违反了第三个 NF,但是否应该有争议)。你能指出我支持你的 POV 的材料吗?看看stackoverflow.com/questions/1723808/…
    • 这是一个很好的问题,Dean。我想我是少数,也许我是老派,但可为空的外键真的让我误会了。我按照您的建议更改了 TaskModule 表,现在一切正常。
    【解决方案2】:

    您的数据库架构与您提供的描述不正确:

    TaskModule 表涉及多对多关系,而不是多对一或零。

    在edmx中,多对多关系表不显示,但在数据库中仍然存在。

    所以你应该修复你的数据库,或者对 EF 提出的关系感到满意!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多