2013-09-30 79 views
3

我正在構建具有許多不同對象(表)的應用程序,其中許多對象都需要具有一對多關係一個「屬性」對象。例如,我可以有五個不同的對象 - A,B,C,D,E - 並且每個對象都需要具有Attributes屬性--A.Attributes,B.Attributes等。實體框架代碼具有指向單個表的多個一對多關係的第一個配置

我的問題是,將是在EF代碼優先這種結構的最佳方式?這個Attribute類可能最終有15-20個不同的類與它有關係。

目前,「父」類中的一個配置是這樣的:

 HasMany(rdp => rdp.Attributes) 
      .WithOptional() 
      .WillCascadeOnDelete(); 

然而,這將創造在屬性表(一個外鍵列例如,「A_ID」,「B_ID」等)。所以如果我有20個不同的屬性類,屬性表將有20個不同的外鍵。

有沒有更好的方法來構造這個?

+0

將屬性設置爲[ComplexType](http://msdn.microsoft.com/zh-cn/data/jj591583.aspx)是否合理? –

+0

@JeremyCook:據我所知,一種複雜的類型只適用於一對一的關係。每個父類(A,B,C等)可以具有零個,一個或多個屬性,所以我不認爲複雜類型可行。 – Amberite

回答

2

您可以引入映射到其自己的表的AttributeList類型。即您可以將列表建模爲一個實體。 A,B,C,D和E與AttributeList具有一對一的關聯,外鍵與A,B,C,D和E類中的AttributeList具有關聯關係。

每個AttributeList對象都包含許多屬性,換句話說,存在從AttributeList到Attribute的一對多關係。

現在你已經有了一種類型的一對多屬性,你只需要一個屬性上的AttributeList的外鍵。

+0

但是,這不會將多外鍵問題移動到不同的表(AttributeList而不是Attribute)嗎?我不確定這是否真的解決了這個問題? – Amberite

+0

不同之處在於,例如A和AttributeList是一對一的,這又意味着你在A中有外鍵。同樣對於B,C,D等 –

+0

啊,我明白了。這實際上是一個好的解決方案。它引入了一個新的類,但我喜歡數據庫結構更加有組織。我會將其標記爲答案。 – Amberite

相關問題