3

MSDN 上的文档对这个主题很清楚:“ComplexTypes cannot contain Associations”

在阅读复杂类型时,最常用的例子是 Address ComplexType:

class Person
{
    public Address Address { get; set; }
}
class Address
{
    public string Street { get; set; }
    public string Zip { get; set; }
    public string CountryId { get; set; }
}

我想将国家定义为一个协会:

class Address
{
    //other properties ....
    public Country Country { get; set; } //vs: string CountryId { get; set; }
}

如您所见,我想在 Address ComplexType 中添加与 Country 的关联。不幸的是,这是不可能的。这使得完整的示例毫无意义,因为我必须在 Person 类型本身上定义 Country 关联,这将使整个 Address-CT 无用。

我们目前正在使用 NHibernate 建立一个项目,因为 EF 缺少我们项目所需的一些功能,但很可能会在 EF 6 中得到支持。考虑到 EF 的快速发展和最近宣布的开源模型,我们希望保持从 NH 到 EF 的可能迁移为未来开放。在 NHibernate ComplexTypes(“组件”)中确实支持关联,因此如果我们现在将它们与 NH 一起使用,那么迁移到 EF 就不容易了。

我想知道这是否只是当前的限制?

  • 未来是否有计划支持这样的功能?
  • 是否有不支持此功能的明确原因,或者只是“未实现 atm”?
4

1 回答 1

0

如评论中所述,有可能的计划。

关于第二个问题,我会说“就在此时”。

如果开发人员有明确的理由,我认为不具有此功能是不合理的。是的,应该明智地使用它,但不应该使用任何 API 吗?

并非每个实体都直接与另一个实体相关联,因此限制这一点是没有意义的。如果我有一个Address必须引用实体的,为什么这与引用实体的单个属性有什么不同?

在这种情况下,复杂类型与简单类型没有什么不同。在某些情况下,也许可以将复杂类型标识为“可重用”。但似乎在 DDD“规则”下,复杂类型不能引用实体并没有真正的理由。

于 2012-08-25T22:44:01.353 回答