【问题标题】:How can I manually add a compound association in entity framework?如何在实体框架中手动添加复合关联?
【发布时间】:2010-10-09 10:36:48
【问题描述】:

这似乎是一个常见的情况,但无论出于何种原因,我都被 EF 的弱编辑器所阻碍。

我有两张桌子,像这样:

Table1
(
Column1 int, PK
Column2 int, PK
)

Table2
(
Column1 int, PK, FK
Column2 int, PK, FK
Column3 int, PK
)

现在,数据库(我们无法控制)没有外键约束。在这个例子中,Table2 应该有一个外键约束,它在 (Column1, Column2) 上引用 Table1。换句话说,Table2 的前两列引用了 Table1 中的主键。这是任何普通数据库中的日常问题。

在其他框架中,例如 LLBLGenPro,我们可以以非常简单的方式手动添加关系。但是,我们无法弄清楚如何在 EF 的编辑器中实现这一点。这个“映射详细信息”窗口非常糟糕且不直观。到目前为止,我们已经成功地选择了映射中的各个表,但它似乎总是希望关联所有列。

有什么想法或参考吗?

【问题讨论】:

  • 你有没有找到这个问题的答案?我也遇到了同样的情况,Craig 的解决方案会花很长时间,实际上会阻止我们使用 EF。

标签: sql visual-studio-2008 entity-framework .net-3.5


【解决方案1】:
  1. 创建具有相同列但具有正确 FK 的“临时”表。如果您无法更改“真实”数据库,请使用数据库的备份。不要费心映射没有 FK 的表。如果您使用新模型,这可能是最简单的,因为在设计器中删除不会删除商店映射。
  2. 使用向导映射它们。
  3. 以 XML 格式打开 EDMX(不在设计器中)
  4. 使用您真正想要映射的表搜索和替换表名。
  5. 删除“临时”表。

一般建议:在执行非标准操作时手动编辑 EDMX。没有 FK = 非标准。 GUI 设计器只处理某些情况。

【讨论】:

  • 感谢您的回复。这听起来非常蹩脚。不仅 FK 场景会破坏这种情况。人们喜欢将其他自定义映射实例添加到 ORM 层。这对 EF 来说看起来不太好。
  • 就是这样,但根据我的经验,大多数 ORM 都需要在某些时候编辑 XML。
【解决方案2】:

假设您有两个实体。

  1. 右键单击 Table1 实体标题并选择添加关联。
  2. 从右端选择 Table2。 (在此向导中设置任何其他属性)
  3. 选择新创建的关联并编辑映射。 (应该已经被选中)
  4. 在“映射详细信息”窗口中,选择 Table2

应该是这样的。

【讨论】:

    【解决方案3】:
    1. 右键单击 Table1 实体标题并选择添加关联。
    2. 从右端选择 Table2。 (在此向导中设置任何其他属性)
    3. 双击新创建的关联并设置属性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多