【发布时间】:2014-08-06 16:53:49
【问题描述】:
我正在构建 Webforms EF6 数据库第一个应用程序,但不确定如何最好地管理 DbContext。我看了很多教程和论坛帖子,但我仍然确定。关于备受青睐的“按请求使用”,我还没有找到一种一次性拯救父母和孩子的方法。我让它与下面的代码一起工作,但我将在何处以及何时处理上下文?我可以使用这种方法吗? Kamyar shown here 的按请求方法会更好吗?
这是我现在得到的:
public static class ContextManager
{
[ThreadStatic]
private static MyContext current;
public static MyContext MyCurrentContext
{
get{
if (current == null)
current = new MyContext();
return current;
}}
}
加上
var context = ContextManager.MyCurrentContext;
.....
context.SaveChanges();
提前感谢您的帮助!
一个具体的例子是“UserProfile”,它包含子对象作为属性,例如“DefaultInvoiceAddress”,它从包含所有用户地址的表中返回用户的默认发票地址。在我处理的最后一个 Web 应用程序中,当用户从配置文件中编辑此地址(例如街道变化)以及来自其他表的其他配置文件信息时,EF 会将来自不同表的所有编辑信息保存在一个请求中(确保他们重新附上)。由于我不知道上下文管理,我不知道它是如何完成的,但我们总是会为请求分配一个通用的当前上下文。
我遇到了this post by Rick Strahl 和this one by Jordan van Gogh - 业务对象/事务似乎是一个答案,但我不太了解如何实现它并且找不到示例。 “每个 HTTP 请求的共享 ObjectContext 实例”对应于上面提到的 Kamyar 的答案,考虑到所有因素,这听起来是一个不错的选择。我是否必须明确处理上下文,如果是这样,何时/何地?有什么缺点吗?
【问题讨论】:
-
您能解释一下“一次性拯救父母和孩子”是什么意思吗?最好有代码示例。
标签: c# entity-framework dbcontext