Linq 在多层应用程序上指定了关系之后,如何首先在EF代码中检索复合类?

Linq 在多层应用程序上指定了关系之后,如何首先在EF代码中检索复合类?,linq,entity-framework,ef-code-first,Linq,Entity Framework,Ef Code First,我有一个有趣的问题: 我创建了一个名为“Container”的类,其成员类型为“Contained” 它看起来像: 公共类容器 { 公共包含的cnt{get;set;} } 该模型包含两个表,my DB如下所示: 容器(主键:id FK:包含的容器id) 包含(主键:ContainedId) EF Code first将此atribute映射为续表中的外键。 当我想使用LINQ检索这些对象时,问题出现了: Container Con=(PersistentManager.Containers.

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

公共类容器
{
公共包含的cnt{get;set;}
}

该模型包含两个表,my DB如下所示: 容器(主键:id FK:包含的容器id) 包含(主键:ContainedId)

EF Code first将此atribute映射为续表中的外键。 当我想使用LINQ检索这些对象时,问题出现了:

Container Con=(PersistentManager.Containers.OfType选择对象中的对象)

通过这种方式(或者强制转换匿名类型),我得到了一个容器。问题是,对所包含对象的引用总是空的。我认为这是为了性能而故意做的,但是,这次,我需要它来恢复整个对象。 Intellitrace显示它甚至没有连接表,所以我想应该指定其他内容 有什么想法吗

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

好的

您需要
包括相关的表。乙二醇

(from PersistentManager.Containers.Include("Contained").OfType...
每次可以包含多个表

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

n层上的延迟加载取决于您希望如何处理数据。我个人更喜欢在DAL/BL中启用延迟加载,但将非EF DTO(实际上与实体相同,但未映射)传递到UI。通过这种方式,BL可以轻松获得所需的数据,而UI可以获得“惰性”对象。

好的

您需要
包括相关的表。乙二醇

(from PersistentManager.Containers.Include("Contained").OfType...
每次可以包含多个表

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


n层上的延迟加载取决于您希望如何处理数据。我个人更喜欢在DAL/BL中启用延迟加载,但将非EF DTO(实际上与实体相同,但未映射)传递到UI。通过这种方式,BL可以轻松获得所需的数据,而UI可以获得“惰性”对象。

您是否使用延迟加载?如果没有,您将需要
包含不同包含实体的相关表。我想我没有使用它。。它们被包含并映射到数据库。我认为应该在查询中指定。。我错了吗?我相信你需要的是<代码>(来自PersistentManager.Containers.Include(“包含”)。of type…
非常好,这确实有效!!还有一件事,我如何能包含2个对象?有没有办法允许在多层应用程序上进行延迟加载?问题是,当我需要此信息时,我的DbContext通常是关闭的。我将发布一些更详细的答案。你是否使用延迟加载?如果没有,你需要
包含相关的表s表示各种包含的实体。我想我没有使用它。它们被包含并映射到数据库。我认为应该是查询中指定的内容。我错了吗?我相信您需要的是类似于…
(来自PersistentManager.Containers.Include(“包含”).OfType…
非常好,这确实有效!!还有一件事,我怎么能包含2个对象?有没有办法允许在多层应用程序上延迟加载?问题是,当我需要此信息时,我的DbContext通常是关闭的。我将以更详细的信息作为答案发布