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

发布于 2024-12-18 09:08:13 字数 1129 浏览 2 评论 0 原文

我的模型是在自己的 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
    }

错误 ahows ObjectContext (context1) 已关闭,我不明白。 context2 和 context1 有什么关系?我敢打赌两者共享相同的引用,但这对我来说不合逻辑。每次传递参数时,EntityConnection 也会被初始化。

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

My model is implemented in an own DLL, where also the generated App.config is placed. The application itself "had" no App.config. No context was initialized (direct access in DLL only). And i get an error, which was solved by copy the connection string into the application new by hand generated App.config.

This case was a little bit redundant for me and I decided to get the EntityConnection by writing it myself. Now the problematic code, which works with the redundant version and not in the own implementation.

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);
    }
}

In another class I call this method and assign it to a customer. Also here i make a new context. Code simplified:

    // 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
    }

The error ahows that ObjectContext (context1) was closed, what I don't understand. What has context2 to do with context1? I bet that both share the same reference, but it's not logical for me. The EntityConnection is also initialized new each time I pass the parameter.

In the redundant version this code works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文