关于此主题,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将是不可能的。
我想知道这只是目前的限制吗?
答案 0 :(得分:0)
评论中提到了可能的计划。
关于第二个问题,我会说“就在这一刻”。
如果开发人员有明确的理由,我认为不具备此功能是不合理的。是的,它应该明智地使用,但不应该使用任何API吗?
并非每个实体都直接与另一个实体相关联,因此限制这一点毫无意义。如果我有一个Address
必须引用一个实体,为什么这与一个实体重新生成有什么不同?
此上下文中的复杂类型与简单类型没有区别。在某些情况下,也许复杂类型可以被识别为“可重用”。但似乎在DDD“规则”下,复杂类型无法引用实体的真正原因。