【问题标题】:Modelling a nullable foreign key Entity Framework为可为空的外键实体框架建模
【发布时间】:2013-08-14 11:58:57
【问题描述】:

取下面的伪代码数据库

table Foo
{
    FooID int not null,
    name varchar not null
}

table Bar
{
    BarID int not null,
    name varchar not null
}

table Waa
{
    WaaID int not null,
    name varchar not null
}

table Link
{
    LinkID int not null,
    FooID int null,
    BarID int null,
    WaaID int null,
    Description varchar not null
}

链接表的目的是允许我将实体链接到一个表中,而无需多个Foo_Bar_LinkFoo_Waa_Link 等表。

我正在 EntityFramework v5 中对这个数据库进行建模。因此,我希望能够指定FooLink 之间的一对多关系,以便我可以获得与给定Foo 关联的所有链接。

问题
EntityFramework Designer 只允许在外键不为空的情况下存在一对多关系。我希望 Foo 有一个导航属性 Associations,它可以获取所有带有 FooID = Foo.FooIDAssociation 实体。作为说明,我正在使用设计器。

【问题讨论】:

  • 你能展示你的Link模型吗?你可能还想看看这个post
  • 我正在使用 EF 设计器创建整个东西,所以我没有剪切我自己的模型代码。如果需要,我可以粘贴它...
  • simple-talk.com/sql/database-administration/… - “一环统治他们,在黑暗中束缚他们”
  • 其实Colin,他说的是一个没有明确关系的表。在这种情况下,它相当于拥有一个带有TableColumn 值的Generic 表(例如"Foo": 1"Bar":2),因此可以使用WHERE Table = 'Foo' and Value = 1 懒惰地加入表非常糟糕的做法。表设计明确(此 foo 与 This Bar 相关)
  • 我尝试过设计器,发现它太局限了。我很快就切换到代码优先,从那以后就再也没有回头。在代码优先中,可空外键使用 Model 类中的可空属性建模。就这么简单。

标签: c# sql entity-framework database-design entity-framework-designer


【解决方案1】:

EF 并非旨在支持像您这样的特殊型号。我知道的唯一方法是插入“空”表示行,例如 id 等于-1。在业务逻辑或 DTO 中实现“聪明”的 getter 和 setter。

【讨论】:

  • 支持工作答案。在标记为答案之前,将等待看看某处是否有一些奇怪的设置可以更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2019-03-12
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多