- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要找出给定 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 子句为代价摆脱了不需要的参数。
最佳答案
将 EntityCollection 与 Reflector 结合起来,查看代码我发现这个类有一个公共(public)方法
public override void Load(MergeOption mergeOption)
{
base.CheckOwnerNull();
this.Load(null, mergeOption);
}
然后调用另一个内部 Load 方法:
internal void Load(List<IEntityWrapper> collection, MergeOption mergeOption)
{
bool flag;
ObjectQuery<TEntity> query = base.ValidateLoad<TEntity>(mergeOption, "EntityCollection", out flag);
base._suppressEvents = true;
try
{
if (collection == null)
{
base.Merge<TEntity>(flag ? RelatedEnd.GetResults<TEntity>(query) : Enumerable.Empty<TEntity>(), mergeOption, true);
}
else
{
base.Merge<TEntity>(collection, mergeOption, true);
}
}
finally
{
base._suppressEvents = false;
}
this.OnAssociationChanged(CollectionChangeAction.Refresh, null);
}
看起来它会在内部检查所有者是否在那里,如果您捕获到异常,这将使您免于“后续 Load() 失败”。如果您在指定的任何时刻使用 MergeOption 调用 Load(MergeOption)。
在您的案例中,“分离”是否意味着实体刚刚从 POST 请求的前端传来?如果您之前可以访问父实体,则可以使用以下方式检查其状态:
_context.Entry(entity).State
我不知道分离父实体是否会反射(reflect)将子实体的“状态”设置为相同的状态。
关于c# - 给定一个 EntityCollection<T>,如何确定它的所有者是否分离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27837608/
我正在尝试更新现有实体 private void UpdateEfItem(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 item) {
我需要我的一个模拟来返回一个专门初始化的对象。我当前的设置是: _mockOrganizationService.Setup( x => x.Retrieve("serviceappo
我有一个派生自 Entity Framework 3 生成的实体的类型。如何将一个客户的订单属性分配给派生客户的订单属性? derivedCustomer.Orders = customer.Orde
我正在尝试更新一个附加了导航属性的实体。 public partial class Stock { #region Primitive Properties public virtua
我想知道如何在 Linq 投影中设置 EntityCollection。下面是我的代码: var orders = (from order in context.Orders select ne
我有 2 个实体,一个部门和一个员工。 1 Department 可以有很多 Employees。我想清除现有部门的所有员工,并将新员工添加到同一部门,然后保存更改。它必须在单个事务中。 但是,当我尝
我正在使用 April 工具包中的新 EntityList 来在 ViewModel 中公开一个集合。我也将 FK 暴露为 EntityCollections。 我想我会将集合公开为 IEnumera
我们有课 public Invoice: EntityObject { public EntityCollection Positions { get {...}; set{...}; }
在 Silverlight 4 项目中,我使用 WCF RIA 服务、MVVM 原则和 EF 4。我遇到了这种情况: 创建了一个名为 Category 的实体和另一个名为 CategoryLocale
我真的找不到关于如何将 IQueryable 转换为 EntityCollection 的答案? var userGroups = this.ObjectContext.UserGroups; fo
概述: 我正在编写一个 FetchXML 查询,以返回 Dynamics 2015 在线 CRM 实例中邮箱被禁用的用户。现在我已经到了需要将查询结果绑定(bind)到 ListView 的阶段。 (
我使用 BING map API 在 map 上创建条形图。该字符包含一些多边形,但我无法将事件处理程序添加到集合中,并且我添加到多边形的所有事件都会立即触发。 var map = new Micro
这是我不相信的代码。请检查我如何将实体集合作为参数传递。 public ExamProduced GetExamProduced(XElement xml) { var examProduce
我正在尝试更新 entityCollection 这是我的 linq: itemFromDb.MamConfigurationToBrowser_V1 = (Entit
我需要找出给定 EntityCollection 的所有者是否是否脱离上下文。原因是为了避免对集合的后续 Load() 调用失败。然而,_ owner和 _ wrappedOwner集合的字段不可访问
我首先在应用程序中使用 EntityFramework 数据库。我希望以某种方式收到有关我的 ViewModel 中 EntityCollection 更改的通知。它不直接支持 INotifyColl
在 Entity Framework (特别是 EF 3.5,但如果它存在于 EF 4 中,它给了我升级的理由)是否可以仅延迟加载集合的一部分?我也可能在接近这个错误,所以我愿意接受建议。我的表/实体
我想为绑定(bind)到 ItemsControl(在 xaml 中)的 EntityCollection 添加一些排序。我也想尽可能简单地做到这一点。看来这是不可能的。 如果我将集合包装在实体内集合
我正在尝试使用 Entity Framework 的结果初始化 List。这是错误: LINQ to Entities 无法识别方法“System.Collections.Generic.List 1
使用 EntityFramework 4。我有一个 EntityCollection currentEntities有 ~500k 个实体和一个 List importedEntities也有 ~50
我是一名优秀的程序员,十分优秀!