相关疑难解决方法(0)

ASP.NET MVC中每个请求一个DbContext(没有IOC容器)

如果这已经得到回答,请道歉,但如果您不使用IOC容器,如何保证每个请求有一个Entity Framework DbContext?(到目前为止,我遇到的答案涉及IOC容器解决方案.)

似乎大多数解决方案都挂钩到HttpContext.Current.Items字典中,但是如何在请求完成时保证处理DbContext?(或者EF的处理不是绝对必要的DbContext吗?)

编辑

我目前正在我的控制器中实例化和处理我的DbContext,但我在ActionFilters和我的MembershipProvider中也有几个单独的DbContext实例(我刚注意到,也有几个验证器).因此,我认为集中我的DbContext的实例化和存储以减少开销可能是个好主意.

asp.net-mvc entity-framework ef-code-first entity-framework-4.1 asp.net-mvc-3

49
推荐指数
4
解决办法
2万
查看次数

实体框架上下文为静态

在Web应用程序中,如果我将实体框架模型的上下文声明为静态是可以的吗?会没事的?不推荐?为什么?谢谢!

asp.net entity-framework

33
推荐指数
2
解决办法
1万
查看次数

在MVC中实例化和处理DbContext的最佳方法是什么?

MVC 3 + EF 4.1

我在两种方法中选择处理DbContext:

  1. 实例化Application_BeginRequest,投入 HttpContext.Current.Items和处置Application_EndRequest.
  2. 创建一次性UnitOfWork(用于包装DbContext),并启动每个控制器操作using(var unitOfWork = new UnitOfWork()) { ... }

请分享您的经验:您更喜欢哪一个?每种方法的利弊是什么?

asp.net-mvc entity-framework poco entity-framework-4.1 dbcontext

30
推荐指数
1
解决办法
1万
查看次数

探索为每个使用它的ViewModel/Class提供DbContext的陷阱(如果有的话)

我正在学习实体框架并在MVVM应用程序中使用它,其中每个ViewModel都使用DbContext进行数据访问.免责声明:在实际应用程序中,我知道ViewModel不应直接与数据访问层交互.

鉴于每个ViewModel都是通过维护与模型本身的关系来监视和操纵View的状态,我开始怀疑旋转多个DbContext对象的含义,并且如果像DBContext这样的东西最好留作单例 - 我很快找到了答案是" ".因此,如果共识是每个用户都有一个实例(如多个ViewModel的情况,或者你有什么),我仍然没有看到任何人提到这个问题的潜在问题.

详细说来,假设我有两个ViewModel,每个我创建一个Context(TestContext继承自DbContext)来维护每个ViewModel生命周期中的数据访问活动:

public class MainWindowViewModel : ViewModelBase
{
    private TestContext db = new TestContext();
    ... other code follows (properties methods etc...)...
}

public class TestViewModel: ViewModelBase
{
    private TestContext db = new TestContext();
    ... other code follows (properties methods etc...)...
}
Run Code Online (Sandbox Code Playgroud)

每个班级都有一个可以消费它的背景,是否有任何陷阱?

嘲讽我的一个想法是,是否有可能让任何一个上下文与另一个上下文不同步,这样一个ViewModel通过其上下文更加"最新"而具有比另一个更新的数据.我有兴趣知道这样的事情.

谢谢.

编辑

我不希望发现/涵盖所有情况,因为这对于编码的情况是独特的.我只是想知道是否有任何"前期"或明显的危险,我不知道自己是这个主题的新手.

c# entity-framework mvvm

7
推荐指数
1
解决办法
1091
查看次数

对静态数据库上下文的困惑

在这里找到stackoverflow上的帖子之后设置了我的DbContext模型.

这是目前的设置......

public static class DbContext
{
    public static MyDbContext Db
    {
        get
        {
            if (!HttpContext.Current.Items.Contains("_db"))
            {
                HttpContext.Current.Items.Add("_db", new MyDbContext());
            }
            return HttpContext.Current.Items["_db"] as MyDbContext;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上下文在end_request上的global.asax中处理,如下所示:

    void Application_EndRequest(object sender, EventArgs e)
    {
        var db = (MyDbContext)HttpContext.Current.Items["_db"];
        if (db != null)
            db.Dispose();
    }
Run Code Online (Sandbox Code Playgroud)

这样,在我的系统中,我可以访问Db DbContext.Db.xxxx

到目前为止,一切都在本地运行,但是,我还没有在生产环境中测试过多个用户.

我的顾虑...

我在stackoverflow上阅读了这篇文章,现在让我担心多个用户访问静态上下文可能存在数据问题.这应该关注我还是我的安装方式好吗?

c# asp.net ef-code-first dbcontext

2
推荐指数
1
解决办法
1396
查看次数