【问题标题】:Can I force multiplicity/assocations with Entity Framework?我可以强制使用实体框架的多重性/关联吗?
【发布时间】:2010-08-02 05:52:31
【问题描述】:

我有以下表格结构,Entity Framework 正确地以一对多的形式返回:

Patient
{
   PatientId PK
}

Death
{
   DeathId PK
   PatientId FK
}

不幸的是,这个 DB 设计是错误的,因为每个 Patient 只能有一个 Death。设计应该是这样的:

Death
{
   PatientId PK
}

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

当我调用Patient.Death 时,我得到了Death 的集合。我只希望它返回一个或空的Death(因为Patient 可能还没有死)。

因此,我涉足模型并尝试将关联的 End2 Multiplicity 更改为:0..1 (Zero or One of Death),但是当我构建项目时出现错误:

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

谁能告诉我,如果可能的话,我可以如何强制它成为一个零或一个关联?

【问题讨论】:

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


    【解决方案1】:

    你能让 EF 做你想做的事吗?当然;就你的数据库元数据对 EF 撒谎。您可以通过针对“正确”设计的数据库生成数据库或手动编辑 SSDL 来做到这一点。

    但是,在您这样做之前请三思。

    我怀疑,EF 使这变得困难是有充分理由的:无论好坏,您的数据库都允许这样做。通过创建一个不这样做的模型,如果您在野外遇到这种数据条件,您将自己设置为运行时错误,因为没有办法将它加载到您的模型中。在您(外部)修复数据库中的不良数据之前,您将无法与这样的人合作。

    【讨论】:

    • 我们问了同样的问题。感谢您的建议。我们将按照 EDMX 默认的方式保留多重性。我们只是“想要”它单数。 ;)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多