2012-08-23 51 views
3

在MSDN上的文檔關於這一主題明確: 「複合類型不能包含關聯」的ComplexType與協會

當閱讀複雜的類型,最常用的例子就是地址的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(「組件」)中支持關聯,因此如果我們現在將它們用於NH,遷移到EF將不太可能。

我想知道這是否只是目前的限制?

  • 是否有計劃在未來支持這樣的功能?
  • 是否存在不支持此功能的明確原因,還是僅僅是「未實現atm」?
+1

這是一個設計問題,您應該直接詢問[ADO.NET團隊](http://entityframework.codeplex.com/discussions)。 –

+0

好的,我會在那裏發佈。 Thx爲鏈接。 –

+1

請記住,EF中的ComplexTypes是可重用的,因此多個實體可以具有相同ComplexType的屬性。因此,在複雜類型的屬性與另一個屬性之間建立關聯並不是真的可行,因爲如果複雜類型在多個實體中使用,這樣的關聯可能不起作用。然而,如果實施的話,它可以工作的方式是定義一個協會,該協會將指向複雜類型的財產作爲「終點」(就關係/相關終結財產而言)。 – Pawel

回答

0

評論中提到了可能的計劃。

關於第二個問題,我會說「就在這一刻」。

我認爲如果開發者有明確的理由不具備此功能是不合理的。是的,它應該明智地使用,但不應該有任何API?

不是每個實體都直接與另一個實體關聯,因此限制這是沒有意義的。如果我有一個必須引用一個實體的Address,爲什麼這與任何一個屬性都不相同?

這種情況下的複雜類型與簡單類型沒有區別。也許複雜類型可以在某些情況下被識別爲「可重用」。但是,在DDD「規則」下,似乎沒有真正的原因,複雜類型不能引用實體。