动态添加包含到实体查询,即
ObjectQuery<Address> oQuery = oAddressingEntitiesContext.Addresses.Include("StreetName");
if (sResultOption == "FULL")
{
oQuery = oQuery.Include("AddressLocation").Include("AddressIdentifiers");
}
IQueryable<Address> oResult = oQuery.Where(oParser.getSearchPredicate());
如果实体具有包含的AddressLocation&amp;;是否有办法确定何时查看下游的查询结果?通过查看Address实体,AddressIdentifiers相关实体?
理想情况下,“IsLoaded”会有所帮助
foreach (Address oAddress in oResult)
{
if (oAddress.AddressLocation.IsLoaded)
{
...
}
}
由于延迟加载,似乎对子相关实体的任何引用都会导致ef尝试加载它们。 (当访问相关实体时,我收到一个错误,当时没有包含已经有一个开放的数据加载器..)
答案 0 :(得分:1)
IsLoaded
是RelatedEnd
类中可用的属性,它是EntityReference
和EntityCollection<...>
的基础。基于EntityObject
的实体使用这些类来公开有关导航属性的信息,但POCO不会。在代理实体的情况下,您通常可以将集合导航属性转换为EntityCollection<...>
(您仍然必须在该操作之前关闭延迟加载)但我不确定如何轻松地EntityReference
除了深入挖掘ObjectStateEntry
和RelationshipManager
。
无论如何,当你检查房产时,你最大的问题可能就是例外。这可以通过两个选项来解决:您allow lazy loading to be performed或关闭它:
context.ContextOptions.LazyLoadingEnabled = false;
您可以在检查之前调用此方法,并且不会执行延迟加载。检查后,您可以再次启用延迟加载。