我有以下表结构,Entity Framework正确地返回为一对多:
Patient
{
PatientId PK
}
Death
{
DeathId PK
PatientId FK
}
不幸的是,这个数据库设计是错误的,因为每Death
只能有一个Patient
。设计应该是这样的:
Death
{
PatientId PK
}
但是,这是一个生产系统,无法更改数据库。我正在编写一个新的ASP.Net MVC前端,所以我正在使用Entity Framework重写DAL层。
当我致电Patient.Death
时,我会收到Death
的集合。我只希望它返回一个或null Death
(因为Patient
可能还没有死)。
所以,我进入模型并尝试将关联的End2 Multiplicity更改为:0..1 (Zero or One of Death)
,但是当我构建项目时,我收到错误:
多重性在角色中无效 关系中的“死亡” 'RefDeath23'。因为 依赖角色属性不是 关键属性,上限 依赖角色的多样性 必须是*。
任何人都可以告诉我,如果可能的话,我可以强迫这个为零或一个关联吗?
答案 0 :(得分:3)
你能让EF做你想做的吗?当然;只是骗你关于你的数据库元数据的EF。您可以通过针对“正确”设计的数据库生成数据库或手动编辑SSDL来完成此操作。
但是,在你这样做之前要三思而行。
我怀疑,EF让这很困难,原因很简单:你的数据库,无论是更糟还是更好,都允许这样做。通过创建一个没有的模型,如果您在野外遇到这种数据条件,您将自行设置运行时错误,因为无法将其加载到模型中。在您(外部)修复数据库中的错误数据之前,您将无法与所有一起工作。
答案 1 :(得分:1)
您的EF模型应与您的数据库匹配。因此,如果数据库错误,那么EF模型也应该是“错误的”。
您可以做的是在业务层中实施此限制。