我的TPT继承+外键有问题。我正在开发一个支持多语言的Web应用程序,包括翻译动态内容。 这是我的表格:
Language
=============
Id, Name
ProcessingAgent
====================
Id, some other fields
LocalizedProcessingAgent
=========================================================
LocalizedProcessingAgentId, Name, Description, LanguageId
正如您已经猜到的那样,我移动了应从ProcessingAgent
转换为LocalizedProcessingAgent
的列。在EF方面,我进行了TPT继承,因此ProcessingAgent
是LocalizedProcessingAgent
的基类。
我是EF的新手,这是我继续前进的第一个项目,其中一个奇怪的行为让我很困惑。
当我从DB生成EF类时,LocalizedProcessingAgent
具有导航属性语言(因为LanguageId
)。问题是在查询db:
Language
属性为null
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
答案 0 :(得分:1)
您应该显式加载此Navigation属性。
db.ProcessingAgents.Include("Language").OfType().First(p => p.Id == 1)
Include
将导致急切加载导航属性。