0
我有TPT繼承+外鍵的問題。我正在開發多語言支持的Web應用程序,包括翻譯動態內容。 這裏是我的表:TPT和外鍵問題
Language
=============
Id, Name
ProcessingAgent
====================
Id, some other fields
LocalizedProcessingAgent
=========================================================
LocalizedProcessingAgentId, Name, Description, LanguageId
正如你已經猜到了,我搬到這應該被翻譯從ProcessingAgent
到LocalizedProcessingAgent
列。在EF方面,我做了TPT繼承,所以ProcessingAgent
是LocalizedProcessingAgent
的基類。 我是新來的EF,這是我第一個移動的項目,其中一個奇怪的行爲讓我很困惑。 當我從DB生成EF類時,LocalizedProcessingAgent
具有導航屬性語言(由於LanguageId
)。問題是,Language
屬性爲空後,我查詢數據庫:
LocalizedProcessingAgentRecord l = db.ProcessingAgents
.OfType<LocalizedProcessingAgentRecord>().First(p => p.Id == 1);
//l.Language is null
所以外鍵導航屬性不填充由於某種原因,我不知道爲什麼。 只有當我查詢派生實體時發生這種情況,在這種情況下LocalizedProcessingAgentRecord
。 任何想法?
這裏的EF XML標記:http://dl.dropbox.com/u/3055964/ef.xml
該死的,我應該對每一個查詢做同樣的事嗎?有沒有更好的方法來實現這一目標? :( – Davita 2010-06-30 07:01:24
如果您使用的是ef v4.0,您可以啓用延遲加載ctx.ContextOptions.LazyLoadingEnable = true。 在ef v1.0中沒有透明延遲加載,但可以執行如下所示的明顯延遲加載: if( !agent.Language.IsLoaded) agent.Language.Load(); – 2010-06-30 08:07:57
感謝yury,你的回答真的很有幫助 – Davita 2010-06-30 09:51:40