使用带回发的DbContext?

时间:2012-08-02 18:52:36

标签: c# asp.net entity-framework

也许是一个简单的问题,但我找不到答案。我有一个Web表单,我在其中声明我的dbContext。但是,当页面执行回发时,它会覆盖dbContext并丢失对象跟踪。在我准备好处理dbContext之前,如何保持dbContext的安全?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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();
}