我可以强制多重性/与实体框架的关联吗?

时间:2010-08-01 16:11:25

标签: entity-framework c#-4.0 entity-framework-4

我有以下表结构,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'。因为   依赖角色属性不是   关键属性,上限   依赖角色的多样性   必须是*。

任何人都可以告诉我,如果可能的话,我可以强迫这个为零或一个关联吗?

2 个答案:

答案 0 :(得分:3)

你能让EF做你想做的吗?当然;只是骗你关于你的数据库元数据的EF。您可以通过针对“正确”设计的数据库生成数据库或手动编辑SSDL来完成此操作。

但是,在你这样做之前要三思而行。

我怀疑,EF让这很困难,原因很简单:你的数据库,无论是更糟还是更好,都允许这样做。通过创建一个没有的模型,如果您在野外遇到这种数据条件,您将自行设置运行时错误,因为无法将其加载到模型中。在您(外部)修复数据库中的错误数据之前,您将无法与所有一起工作。

答案 1 :(得分:1)

您的EF模型应与您的数据库匹配。因此,如果数据库错误,那么EF模型也应该是“错误的”。

您可以做的是在业务层中实施此限制。