2009-02-23 60 views
7

这似乎是一个常见的情况,但无论出于何种原因,我都被EF的弱编辑所困扰。如何在实体框架中手动添加复合关联?

我有两个表,就像这样:现在

Table1 
(
Column1 int, PK 
Column2 int, PK 
) 

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

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

在其他框架,如LLBLGenPro,我们可以手动添加关系的方式非常简单。但是,我们无法知道如何在EF的编辑器中实现这一点。这个“映射详细信息”窗口很糟糕,非直观。到目前为止,我们已经设法选择了映射中的各种表格,但似乎总是要关联所有列。

任何想法或参考?

+0

你有没有找到一个答案吗?我处于同样的情况,克雷格的解决方案将永远存在,并且实际上阻止我们使用EF。 – Vaccano 2009-05-18 19:49:58

回答

1
  1. 创建具有相同列但正确FK的“临时”表。如果您不能更改“真实”的数据库,请使用数据库的备份。不要打扰没有FKs映射表。如果您使用新模型,这可能是最容易的,因为设计器中的删除操作不会删除存储映射。
  2. 用向导映射它们。
  3. 打开EDMX为XML(而不是在设计师)
  4. 搜索和替换表名,使用你真的想要映射表。
  5. 删除“临时”表。

一般建议:在做非标准事情时手动编辑EDMX。没有FKs =非标准。 GUI设计器仅处理某些情况。

+1

谢谢你的回复。这听起来非常蹩脚。这不仅是FK的情况,它会使这一点变得糟糕。还有其他人们喜欢添加到ORM图层的自定义映射实例。这对EF来说看起来不太好。 – 2009-02-24 14:47:35

7

假设你有两个实体。

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

这应该是它。

0
  1. 右键单击Table1实体标题并选择添加关联。
  2. 从右手边选择Table2。 (设置在此向导任何其他属性)
  3. 双击新创建的关联和设置属性