1

我有一个有趣的问题:我创建了一个名为“Container”的类,它有一个“Contained”类型的成员它看起来像:

public class Container { public Contained cnt{ get; set; } }

该模型包含两个表,我的数据库看起来像: Containers(PK:id FK:Contained_ContainedId) Contained(PK:ContainedId)

EF Code first 正确地将此属性映射为 Contined 表中的外键。当我想使用 LINQ 检索这些对象时,问题就来了:

Container Con=(from Object in PersistentManager.Containers.OfType<Container> select Object).SingleOrDefault();

这样(或强制转换匿名类型),我得到一个容器。问题是,对 Contained 对象的引用始终为空。我认为这是为了性能而故意这样做的,但是,这一次,我需要它来恢复完整的对象。Intellitrace 显示它甚至没有加入表格,所以我想应该指定其他东西有什么想法吗?

Allrigth,感谢 Basic,我已经使用 include 子句解决了这个问题。我认为应该有一种在上下文封闭环境中使用延迟加载的方法(多层模式总是建议处理这些对象)

4

1 回答 1

1

行...

你需要Include相关的表。例如

(from PersistentManager.Containers.Include("Contained").OfType...

每次可以包含多个表

(from PersistentManager.Containers.Include("Contained").
Include("OtherContained").
Include("Contained.SomeOtherLinkedType").
OfType...

等等等等

n-Tier 上的延迟加载取决于您要如何处理数据。我个人更喜欢在 DAL/BL 中启用延迟加载,但将非 EF DTO(实际上与您的实体相同但未映射)传递给 UI。这样,BL 可以轻松获取它想要的数据,而 UI 可以获取“惰性”对象。

于 2012-10-21T17:20:21.933 回答