2013-02-06 43 views
1

我有和數據庫第一創建的EMDX,我已經遵循示例here,所以現在我可以映射一個實體到我的數據庫中的多個表,並且這工作正常。如何將實體映射到多個表並具有導航屬性?

但我還需要具有FK在這個實體上的表上提供的導航屬性,我怎麼能實現這一點?

我在我的EMDX中有兩個名爲Carteira和另一個名爲Ativo的表,我希望Ativo的屬性也在Carteira上,因爲他們有0:1的關係,所以我已經完成了這個工作,這是工作! :)但我也希望是在Ativo類的導航性能上Carteira

請參閱樣本描述屬性:

class Ativo 
    { 
     public string Id { get; set; } 
     public IList<Valor> Valores { get; set; } 
    } 

    class Carteira 
    { 
     public string AtivoID { get; set; } 
     public Ativo Ativo {get; set;} 
    } 

所以我想有像
Carteira。 Valores(這應該從Ativo中被推薦)。

請注意,我不想讓這個代碼手動使用部分類和acessing的導航中,我已經做到了這一點,我不喜歡這種方式,它看起來像這樣:

public partial class Carteira 
    { 
     public List<Valor> Valores 
     { 
      get 
      { 
       if (this.Ativo == null) 
        return null; 
       return this.Ativo.Valores; 
      } 
     } 
    } 

我會想知道如何使用EMDX來實現這一點,這與簡單屬性可以做到的方式相同,這是可能的嗎?

回答

1

我設法讓導航在2個differente方面工作:

1 - 創建一個 '協會' 在模型(EMDX)。 該協會的工作,如果他們實際FKS,因爲我已經有兩邊的映射collumns,它可以通過執行這些步驟來完成:

創建於Carteira一個新公會(二級類),反映與Ativo(第一級)相同的FK屬性。當做到這一點,在導航性能上這兩個類

2-使用表每類型的繼承

在這種特定的情況下創建的,該類實際上可以從其它繼承,再取使用所有的導航,爲了這個工作,我必須實現TBT繼承,改變表格並在模型(EDMX)的兩個表(具體和繼承)添加「條件映射」

1

對於0:1至1的關係,EF要求外鍵與從屬表上的主鍵相同。因此,Ativo類必須具有與AtivoID同名的主鍵,並且該外鍵也應該是外鍵。

+0

它們都是PK ,但問題更復雜,因爲我不想在相關表中添加卡塔拉FK(第二級),因爲卡塔拉(第二級)有一個PK是Ati的FK vo(第一級)。我實際上使用模型中的映射功能(EDMX)創建了一個「虛擬」FK。但是你在評論中是正確的,它幫助我找到了實現的正確方法,所以對你+1 +1 –

+0

很高興我的答案幫助了你,你可以在SQL中添加FK而不是執行它,在我們所做的真實世界場景中在引用表中沒有相應父項的孤兒記錄。 SQL允許您關閉強制執行,但是EF從SQL讀取關係時仍然可以正常工作,強制FK獨立於EF。 –

+0

是的,但由於這是我只需要在應用程序上下文(EF)的東西,它直接在EF做這件事情更有意義,因爲我不會需要添加一個FK,在數據庫級別不提供任何服務,如果EF已經提供這樣一個功能。 –

相關問題