在數據庫中,我們不允許做出了巨大的變化,我們有如下表其他表中(不相關的列隱藏在[一些列...]):實體框架6 - 引用表 - 如何編寫自定義naviagtion-property-logic?
主
Id, [some other columns...]
表1
Id, [some other columns...]
表2
個Id, [some other columns...]
參考
Id, MasterId, TableName, ForeignId
我們使用EF6(代碼首先,數據註解優選)來訪問數據庫。
現在我們希望能夠在我們的代碼中導航,例如通過「master.References.First()。ReferenceRow」引用表。在這種情況下,「ReferenceRow」可能是一個導航屬性,我們需要在「映射」後面放置一些額外的定製邏輯,如「查看值TableName,如果Table1從表中取出行1其中Id = ForeignId,否則,如果表2 ...「列表名將像TPH中的鑑別器列。我認爲EF中沒有開箱即用的解決方案,但是可以將此邏輯添加到導航屬性中嗎?
當然,我們可以創建一個抽象類「RefereceTable」,讓所有可引用的表繼承它。但在這種情況下,TPH會創造出很多專欄。 TPC和TPT不會給我們我們想要的表現。這就是爲什麼我們不能使用繼承類型來解決這個問題的原因。此外,該表中唯一的常見列將是Id列。
這就是我們想要知道的原因:有沒有一種方法可以在導航屬性後面實現可以解決我們問題的自定義邏輯?
這種邏輯不應該在導航屬性中。它屬於資源庫層的某個地方。所以像GetReferencesByMasterId(int masterId)這樣的函數可以讓代碼查看不同的導航屬性。 – tranceporter 2014-09-22 09:37:14
@tranceporter是的,那是正確的,那就是我們的實際情況,它可以讀取。但是對於插入,我們有一些問題:可以說我們想要在Master中插入一行,在Table1中插入一行,在References中插入一行,將其他鏈接在一起。在保存之前我們不知道Table1-Row的Id,所以我們必須再次調用SaveChanges()來保存References-row。這將導致第二筆交易。面對這個問題,引起了我對上述問題的關注。 – Greenhorn 2014-09-22 10:23:10
看看我的回答是否有幫助。 – tranceporter 2014-09-22 10:37:27