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。

在冗余版本中,此代码有效

EF 4.0 -创建了两个不同的新ObjectContext实例,但它们共享相同的引用

从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