带关联的ComplexType

时间:2012-08-23 11:49:04

标签: entity-framework

关于此主题,MSDN上的文档很明确: “ComplexTypes不能包含关联”

在阅读复杂类型时,最常用的示例是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; }
}

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

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

我想知道这只是目前的限制吗?

  • 将来是否有计划支持此类功能?
  • 是否存在不支持此功能的明显原因,或者只是“未实施atm”?

1 个答案:

答案 0 :(得分:0)

评论中提到了可能的计划。

关于第二个问题,我会说“就在这一刻”。

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

并非每个实体都直接与另一个实体相关联,因此限制这一点毫无意义。如果我有一个Address必须引用一个实体,为什么这与一个实体重新生成有什么不同?

此上下文中的复杂类型与简单类型没有区别。在某些情况下,也许复杂类型可以被识别为“可重用”。但似乎在DDD“规则”下,复杂类型无法引用实体的真正原因。