实体框架4 - 关联

时间:2010-12-07 23:37:59

标签: entity-framework associations foreign-key-relationship

EF 4不支持不基于外键/主键的关联。在很多情况下,您需要使用非关键字段在表之间导航。

例如,药物表具有:

medID (PK)
medGrouperID
medName

成分表有:

ingredientID (PK)
ingredientName

和链接表有:

medGrouperIDID (PK)
ingredientID (PK)

在这种情况下,EF不允许我在药物和链接表之间创建关联,因为两者都没有外键。

我很长时间没有做任何数据库设计,所以我很难理解这个限制;这是否遵循良好的数据库设计或EF的失败?

修改
MedGrouperID允许将具有相同成分,用途,说明等的所有药物组合在一起。如果每种药物都有自己的成分,用途等记录,这就消除了存在的重复数据。

添加一个新的MedGrouper表会起作用,但是这将需要一个额外的连接,这对性能不利。

药物

* MedID (PK)
* MedGrouperID (FK)
* MedName

MedGrouper     * MedID(FK)     * MedGrouperID(PK)

成分<​​/ P>

* IngredientID (PK)
* IngrediantName

MedicationIngredients(交界/联接表)

* MedGrouperID (PK, FK)
* IngredientID (PK, FK)

/修改

1 个答案:

答案 0 :(得分:1)

  

这是否遵循良好的数据库设计或EF的失败?

这不是EF的失败,这是一个不正确的数据库设计(对不起,对不起)。从纯粹的数据库查询角度来看,这种设计是行不通的,因此你不能指望EF能够解决这个问题。

您似乎在药物成分之间有*..*

因此,您应该拥有以下表格:

<强>药物

  • MedID(PK)
  • MedGrouperID
  • MedName

<强>成分

  • 成分ID( PK
  • IngrediantName

MedicationIngredients (结点/联接表)

  • MedID( PK FK
  • IngredientID( PK FK

如果使用Entity Framework生成模型,EF将创建具有多对多关联的两个实体,并且根本不需要映射连接表。

您必须记住的是,关系是基于参照完整性的,您在当前的数据库架构中没有正确设置。

HTH。