代码之家  ›  专栏  ›  技术社区  ›  djdd87

我能用实体框架强制多重性/关联吗?

  •  3
  • djdd87  · 技术社区  · 14 年前

    我有下面的表结构,实体框架正确地返回为一对多:

    Patient
    {
       PatientId PK
    }
    
    Death
    {
       DeathId PK
       PatientId FK
    }
    

    不幸的是,这个数据库设计是错误的,因为您只能有一个 Death Patient . 设计应该是这样的:

    Death
    {
       PatientId PK
    }
    

    但是,这是一个生产系统,无法更改数据库。我正在编写一个新的ASP.NET MVC前端,所以我正在使用实体框架重写DAL层。

    当我呼唤 Patient.Death ,我收集了 死亡 . 我只想给我一个或空的 死亡 (如 病人 可能还没死)。

    因此,我深入到模型中,试图将关联的end2重数改为: 0..1 (Zero or One of Death) 但是当我构建项目时,我得到了错误:

    多重性在角色中无效 关系中的“死亡” “RefDeDAT23”。因为 依赖角色属性不是 键属性的上界 依赖角色的多重性 必须是*。

    有人能告诉我,如果可能的话,我怎样才能强迫这是一个零或一个关联?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Craig Stuntz    14 年前

    你能让英孚做你想做的吗?当然,只要向EF撒谎,告诉他们你的数据库元数据。您可以通过根据“正确”设计的数据库生成数据库或手动编辑SSDL来实现这一点。

    但是,在做这件事之前要三思而后行。

    我想,英孚让这件事变得困难是有一个很好的原因的:你的数据库,不管是坏的还是好的,都允许这样做。通过创建一个没有的模型,如果您在野外遇到这个数据条件,您将为自己设置一个运行时错误,因为没有办法将它加载到您的模型中。你不能和这样的人一起工作 完全 直到您(外部)修复了数据库中的坏数据。

        2
  •  1
  •   Shiraz Bhaiji    14 年前

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

    您可以做的是在业务层中实现这个限制。