0

我們有一個現有的數據庫,我們想使用代碼優先的EF連接到。如何使用EF代碼優先實現此模式? [複雜複合鍵組合(多個外部表)]

我們所遇到的是在下列情況下一個問題......

**TABLE 1** 
DebtorID Int PK (identity column) 
Type Int PK FK (value would be '1' - FK to Table 4) 

**TABLE 2** 
CreditorID Int PK (identity column) 
Type Int PK FK (value would be '2' - FK to Table 4) 

**TABLE 3** 
TransactionID Int PK 
ParentID Int FK 
ParentType Int FK 

----------------------- 

**TABLE 4** 
Type Int PK (identity column) 
Description Varchar(max) 

表3有多個表的外鍵鏈接(表1,表2,等...)。鍵的類型列是唯一的。爲了允許這種情況,約束條件已經改變。

問:我們如何使用代碼優先實現此模式?我們已經查看了Data Annotations和Fluent API,但是除了改變數據庫模式(這將是一個令人頭疼的問題)之外,不能提出解決方案。

就目前而言,我們似乎只能鏈接到一個外表。

該解決方案還必須考慮其他表(此處未顯示),表1的主鍵等是主鍵的一部分。


我們的模式的真實世界視圖,以及代碼優先的問題。

當前模式: http://oi60.tinypic.com/2aeug4m.jpg

代碼優先模式: http://oi62.tinypic.com/9schmc.jpg

+0

(如TABLE_1和TABLE_2導航性能)的任何配置我做既然你已經有一個數據庫,爲什麼不使用數據庫優先的方法 - http://msdn.microsoft.com/en-gb/data/jj206878.aspx?它應該爲你創造工作課程。 –

+0

我們希望使用代碼優先的遷移部分來處理對數據庫模式的持續更新。我們也喜歡先創建類的概念,而不必在大型開發團隊中使用單個edmx文件。代碼是第一個錯誤的路要走嗎?我們是否應該首先使用數據庫,並且是否易於使用數據庫優先更新部署的數據庫並進行新的更改? –

回答

0

我發現使用流暢API的答案 - 是比我想象的要容易得多。

只需在OnModelCreating()方法中,我需要添加多個ForeignKey條目來覆蓋每個鏈接。

modelBuilder.Entity(Of TABLE_3).HasRequired(Function(p) p.TABLE_1).WithMany().HasForeignKey(Function(p) New With {p.ParentID, p.ParentType}) 

modelBuilder.Entity(Of TABLE_3).HasRequired(Function(p) p.TABLE_2).WithMany().HasForeignKey(Function(p) New With {p.ParentID, p.ParentType}) 

這是除了使用數據標註有關於設置主鍵和導航性能