代码之家  ›  专栏  ›  技术社区  ›  Alex

实体框架通用存储库上下文

  •  0
  • Alex  · 技术社区  · 14 年前

    我正在构建一个ASP.NET 4.0 MVC 2应用程序,基于 this blog post .

    我不知道如何处理ObjectContext的生命周期——这里是我的知识库类中的一个典型方法:

    public T GetSingle<T>(Func<T, bool> predicate) where T : class
    {
        using (MyDbEntities dbEntities = new MyDbEntities())
        {
            return dbEntities.CreateObjectSet<T>().Single(predicate);
        }
    }
    

    MyDbEntities ObjectContext 由实体框架4生成。

    1. 可以打电话吗 .CreateObjectSet() 创建/处置 MyDB实体 每个HTTP请求?如果没有,我如何保存这个对象?
    2. 如果另一个方法返回 IEnumerable<MyObject> 使用类似的代码,如果我尝试在该方法的范围之外执行CRUD操作,这会导致未定义的行为吗?
    1 回复  |  直到 14 年前
        1
  •  4
  •   Steve Michelotti    14 年前

    是的,可以在每个请求上创建一个新的对象上下文(然后调用CreateObjectSet)。事实上,这是首选。和实现IDisposable的任何对象一样,您应该是一个好公民并处理它(您的代码如上所述)。有些人使用IOC来控制对象上下文的生存期,这些上下文的作用域是HTTP请求,但不管怎样,都是短暂的。

    对于问题的第二部分,我认为您在问另一个方法是否使用 不同的 数据上下文的实例(如果我误解了,请告诉我)。如果是这样,您需要将它附加到执行实际数据库更新的新数据上下文。这是一件好事。此外,也可以接受使用工作单元模式。