实体框架:WPF与ASP.Net中的上下文。。。如何处理
目前,对于ASP.Net内容,我使用一个请求模型,其中每个请求都会创建一个上下文(仅在需要时),并在该请求结束时进行处理。我发现这是一个很好的平衡,既不必使用每查询模型进行旧的操作,也不必永远使用上下文。现在的问题是,在WPF中,我不知道有什么可以像请求模型那样使用。现在看来,永远保持相同的上下文(这可能是一场噩梦)或回到令人讨厌的使用每查询模型是一个巨大的痛苦。我还没有看到一个好的答案 我的第一个想法是有一个打开和关闭(或任何名称)的情况,在这种情况下,被调用的顶级方法(比如一个事件处理方法,比如单击)将“打开”上下文,并在最后“关闭”它。由于我在UI项目中没有任何内容知道上下文(所有查询都包含在“扩展”生成的实体类的方法中,这些实体类有效地在实体和UI之间创建了一个伪层),这似乎会使实体层依赖于UI层 我真的很茫然,因为我对州政府的规划不是很熟悉 补充: 我读过关于使用线程的书,但是 我有一个关于上下文的问题 无所事事就是错误和恢复 假设我有一个更新用户信息的表单 信息和有一个错误。这个 用户表单现在将显示更改 指向上下文中的用户对象 这是好的,因为它使一个更好的 用户体验无需重新键入 所有的变化 现在,如果用户决定转到 另一种形式。这些变化仍然存在 在上下文中。在这一点上,我很高兴 被错误的用户卡住了 对象,否则我必须 告诉上下文重置的UI 那个用户。我想那不是 可怕的(用户上的重新加载方法) 但我不知道那是不是 真正解决了这个问题实体框架:WPF与ASP.Net中的上下文。。。如何处理,wpf,entity-framework,Wpf,Entity Framework,目前,对于ASP.Net内容,我使用一个请求模型,其中每个请求都会创建一个上下文(仅在需要时),并在该请求结束时进行处理。我发现这是一个很好的平衡,既不必使用每查询模型进行旧的操作,也不必永远使用上下文。现在的问题是,在WPF中,我不知道有什么可以像请求模型那样使用。现在看来,永远保持相同的上下文(这可能是一场噩梦)或回到令人讨厌的使用每查询模型是一个巨大的痛苦。我还没有看到一个好的答案 我的第一个想法是有一个打开和关闭(或任何名称)的情况,在这种情况下,被调用的顶级方法(比如一个事件处理方法,
你有没有想过尝试一个单位的工作?我有一个类似的问题,我基本上需要能够打开和关闭一个上下文,而不暴露我的EF上下文。我认为我们使用的是不同的体系结构(我使用的是一个IoC容器和存储库层),所以我必须对这段代码进行一些裁剪,以便向您展示。我希望有帮助 首先,当涉及到“Something\u Click”方法时,我会有如下代码:
using (var unitOfWork = container.Resolve<IUnitOfWork>){
// do a bunch of stuff to multiple repositories,
// all which will share the same context from the unit of work
if (isError == false)
unitOfWork.Commit();
}
if (UnitOfWork.Current != null)
{
return UnitOfWork.Current.ObjectContext;
}
else
{
return container.Resolve<Entities>();
}
这可能需要一些工作才能将其考虑到您的解决方案中,但这可能是一种选择
public class UnitOfWork : IUnitOfWork
{
private static LocalDataStoreSlot slot = Thread.AllocateNamedDataSlot("UnitOfWork");
private Entities entities;
public UnitOfWork(Entities entities)
{
this.entities = entities;
Thread.SetData(slot, this);
}
public Entities ObjectContext
{
get
{
return this.Entities;
}
}
public static IUnitOfWork Current
{
get { return (UnitOfWork)Thread.GetData(slot); }
}
public void Commit()
{
this.Entities.SaveChanges();
}
public void Dispose()
{
entities.Dispose();
Thread.SetData(slot, null);
}
}