0

对于我目前正在处理的项目的一部分,我有一组用于联合操作的四个表。一个表是其他三个表的抽象基础,每个表都在我的 EF 模型中表示,如下所示:

EF 模型 -- 动作 http://chris.charabaruk.com/system/files/images/EF+Model+Actions.png

但是,我目前面临两个问题。第一个问题是Actor(对 a 的引用User)和Subject(对与每种类型的操作关联的类的实体的引用)null在我的子类中,尽管关联的数据库列在其关联表中保存了行的有效键。虽然我可以通过获取密钥ActorReferenceSubjectReference但这当然需要设置一个新的 EF 上下文并查询它以获取引用的对象(也是 null)。FooReference.Value

第二个问题是具体动作类与其相关实体类之间关系的互惠端总是什么都没有。例如Task.RelatedActions,它应该给我所有引用特定任务对象的对象,它TaskAction完全没有对象。同样,数据库中存在有效行,Entity Framework 只是没有将它们放入对象中并将它们交给我。SubjectRelatedActions

任何人都知道我做错了什么,我应该怎么做才能让它发挥作用?

更新:似乎所有关系属性都不再在我的实体模型中工作了。哎呀...

4

1 回答 1

5

我认为您在这里遇到的问题是默认情况下 EF 不会自动加载相关实体。如果加载实体,除非您执行以下操作之一,否则对相关实体的集合或引用将为空:

1) 使用预先加载以便在单个查询中检索您的主要实体和相关实体。为此,请通过添加对 Include 方法的调用来修改您的查询。在上面的示例中,您可以使用以下查询:

from a in context.Actions.Include("Actor") select a

这将使用相关的 Actor 方法检索每个操作。

2)在需要时使用显式延迟加载来检索相关实体:

action1.ActorReference.Load()

在 .Net 4.0 随附的 EF 版本中,您还将拥有以下附加选项:

3)打开隐式延迟加载,以便在您引用导航属性时自动检索相关实体。

  • 丹尼
于 2009-03-04T04:00:15.183 回答