对于我目前正在进行的项目的一部分,我有一组用于可联合操作的四个表.一个表是其他三个表的抽象基础,每个表在我的EF模型中表示如下:
EF模型 - 行动http://chris.charabaruk.com/system/files/images/EF+Model+Actions.png
但是,我目前面临着两个问题.第一个问题是Actor
(对a的引用User
)和Subject
(对与每种操作类型相关联的类的实体的引用)null
在我的子类中,尽管关联的数据库列将有效键保存到其关联表中的行.虽然我可以获取密钥ActorReference
,SubjectReference
但这当然需要设置一个新的EF上下文并查询引用的对象(因为它也是null).Foo
Reference.Value
第二个问题是具体行动类与其相关实体类之间关系的相互结束总是没有出现.例如Task.RelatedActions
,应该给我的一切TaskAction
,其中的对象Subject
是指在其特定任务的对象RelatedActions
是所谓的,是完全没有的对象.同样,数据库中存在有效行,实体框架不是将它们放在对象中并将它们交给我.
任何人都知道我做错了什么,以及我应该做些什么才能让它发挥作用?
更新:似乎根本没有任何关系属性在我的实体模型中起作用.WTF ...
我认为您在此遇到的问题是,默认情况下,EF不会自动加载相关实体.如果加载实体,除非您执行以下操作之一,否则对相关实体的集合或引用将为空:
1)使用预先加载,以便在单个查询中检索主实体和相关实体.为此,请通过添加对Include方法的调用来修改查询.在上面的示例中,您可以使用以下查询:
from a in context.Actions.Include("Actor") select a
这将使用相关的Actor方法检索每个动作.
2)使用显式延迟加载在需要时检索相关实体:
action1.ActorReference.Load()
在随.Net 4.0一起提供的EF版本中,您还将拥有以下附加选项:
3)启用隐式延迟加载,以便在引用导航属性时自动检索相关实体.
丹尼