EF 4.0 -创建了两个不同的新ObjectContext实例,但它们共享相同的引用
本文关键字:实例 ObjectContext 引用 共享 创建 两个 EF | 更新日期: 2023-09-27 18:15:43
我的模型是在一个自己的DLL中实现的,生成的App.config也放在这里。应用程序本身"没有"App.config。没有初始化上下文(仅在DLL中直接访问)。我得到一个错误,这是通过复制连接字符串到新的应用程序手工生成的App.config解决的。
这个例子对我来说有点多余,我决定通过自己编写来获得EntityConnection。现在是有问题的代码,它与冗余版本一起工作,而不是在自己的实现中。
public Discount GetDiscountByOffer(int discountId)
{
// Own implementation, redundant one without passed connection parameter
using (context2 = new SalesEntities(Configuration.EntityConnection))
{
return context2.Discounts.Single(d => d.ID == discountId);
}
}
在另一个类中,我调用这个方法并将其分配给一个客户。这里我也做了一个新的上下文。代码简化: // Own implementation, redundant one without passed connection parameter
using (context1 = new SalesEntities(Configuration.EntityConnection))
{
var customer = GetCustomer(10004);
customer.ActualDiscount = GetDiscountByOffer(5); // here is the call and
// the error
}
这个错误显示ObjectContext (context1)是关闭的,我不明白。context2和context1有什么关系?我敢打赌两者都有相同的参考文献,但这对我来说不合逻辑。每次传递参数时,EntityConnection也初始化为new。
在冗余版本中,此代码有效
从context2获取对象,将其附加到context1,然后设置客户属性。
MSDN的解释:http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.attach.aspx
阅读下面的"使用多个ObjectContext实例的问题":
http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx the-problems-of-working-with-multiple-objectcontext-instances