3

也许是一个简单的问题,但我找不到答案。我有一个 web 表单,我在其中声明了我的 dbContext。但是,当页面进行回发时,它会覆盖 dbContext 并且我会丢失对象跟踪。在我准备好处理它之前,如何保证 dbContext 不受更改的影响?

4

2 回答 2

5

使用 DbContext 的建议模式是为每个 HTTP 请求实例化一个新的 DbContext,并在该特定请求的持续时间内使用该实例。

您不应尝试跨 HTTP 请求保留 DbContext 的实例。

于 2012-08-02T18:55:07.090 回答
4

你不能dbContext在请求之间重用!

使用的正确模式是为每个 HTTP 请求创建一个新对象(无论是否回发)

using (var context = new MyDbContext())
{
    ...
}

为什么?
因为DbContext它是一个轻量级的结构,但更重要的是它不是线程安全的。

如果您想在回发中更新某些内容,请使用相同的模式,例如

object productId = //get it from request
using (var context = new MyDbContext())
{
    //that's your old product
    var product = context.Select(p=>p.Id == product.Id).FirstOrDefault();
}
于 2012-08-02T19:14:40.353 回答