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)
/修改
答案 0 :(得分:1)
这是否遵循良好的数据库设计或EF的失败?
这不是EF的失败,这是一个不正确的数据库设计(对不起,对不起)。从纯粹的数据库查询角度来看,这种设计是行不通的,因此你不能指望EF能够解决这个问题。
您似乎在药物和成分之间有*..*
。
因此,您应该拥有以下表格:
<强>药物强>
<强>成分强>
MedicationIngredients (结点/联接表)
如果使用Entity Framework生成模型,EF将创建具有多对多关联的两个实体,并且根本不需要映射连接表。
您必须记住的是,关系是基于参照完整性的,您在当前的数据库架构中没有正确设置。
HTH。