【问题标题】:How do I add a navigation property for a Entity Framework Complex Type如何为实体框架复杂类型添加导航属性
【发布时间】:2009-10-26 22:35:34
【问题描述】:

我正在使用 VS2010 Beta 2,我有一个名为 Address 的复杂类型,具有以下属性:

  • 街道
  • 城市
  • 国家标识

我的模型中定义了一个 Country 实体,但我似乎找不到从 CountryId 属性添加引用(导航属性)的方法我的复杂类型到我的 Country 实体的 Id 属性。

我是在用错误的方式处理这个问题,或者这是我无法与设计师一起做的事情??...

我的另一个选择是创建一个地址实体,但它对我来说听起来不合适。

【问题讨论】:

  • Address Complex 类型包含其他属性,此时它们只是不相关.....

标签: visual-studio entity-framework linq-to-entities


【解决方案1】:

不,你不能这样做,因为它违背了复杂类型和导航属性的概念。复杂类型具有值语义,而不是引用标识。导航属性是一流的实体并具有引用语义。因此,它们不能是复杂类型的一部分。您似乎已经发现,解决方案是将具有值语义的部分划分为复杂类型,并将其添加到包含您需要的导航属性的实体中。

【讨论】:

  • 这如何违反值语义?导航属性只是对实体的引用。
  • @MZywitza:您刚刚回答了自己的问题。如果它包含引用,则它实际上不是值类型。请参阅 Microsoft 关于值类型的指南:msdn.microsoft.com/en-us/library/ms229017.aspx
  • 该链接讨论了结构。 DDD 中的值类型都是没有自己标识的类型。想想问题中的样本。它是一种值类型,因为具有相同值的两个地址是可以互换的,无论引用是否为实体。
  • DDD 不会阻止值类型引用实体。 stackoverflow.com/questions/9498637/… 如果两个地址引用同一个城市怎么办?这是否使它们不可互换?那么 Hibernate 是否支持这一点?是的,几乎从一开始。 EF应该支持吗?绝对而且可能会。因此,即使盲目地捍卫像 DDD 这样的方法是错误的,捍卫像 EF 这样的实现更糟糕。
  • @CagatayKalan:虽然这篇文章已有将近 7 年的历史,但我会注意到我试图真正回答这个问题,而不是对任何事情发表意见。 EF 1 有一个特殊的东西概念。
【解决方案2】:

好的,

当前版本的实体框架似乎不支持复杂类型中的导航属性或外键。

另一个明智的选择是创建一个单独的地址实体,它将拥有它需要的所有外键,然后在我的所有其他实体中创建导航属性。

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多