我需要找出给定的所有者是否EntityCollection<T>
与上下文分离。原因是为了避免对集合的后续 Load() 调用失败。但是,集合的 _owner
和 _wrappedOwner
字段不可访问,并且似乎没有可用的元数据提供此信息。
有没有办法找出所有者(或至少它是 EntityState)?
背景:由于政策不允许我们使用延迟加载,我想在需要时创建一些简单的显式延迟加载,最好使用通用方法。这就是我目前的做法,要求所有者作为参数:
public static EntityCollection<T> ReloadIfNeeded<T>(this EntityCollection<T> collection, EntityObject owner) where T : EntityObject {
if (owner.EntityState != EntityState.Detached && !collection.IsLoaded) {
collection.Load();
}
return collection;
}
示例调用:
var orders = customer.Orders.ReloadIfNeeded(customer); //I would like to get rid of the customer parameter here...
我正在使用 .NET 4.0 版。
编辑:我的解决方案,实施 Ognyan Dimitrov 的答案:
public static EntityCollection<T> ReloadIfNeeded<T>(this EntityCollection<T> collection) where T : EntityObject {
try {
if (!collection.IsLoaded) {
collection.Load();
}
} catch (InvalidOperationException) {
//just leave unloaded
}
return collection;
}
这不考虑最初寻求的实体状态,而是以 try/catch 子句为代价摆脱了不需要的参数。