代码之家  ›  专栏  ›  技术社区  ›  J.W.

初始化实体框架上下文的最佳方法?

  •  37
  • J.W.  · 技术社区  · 17 年前

    一种是在类级别进行初始化,例如

    public class EntityContactManagerRepository
        : ContactManager.Models.IContactManagerRepository
    {
        private ContactManagerDBEntities _entities = new ContactManagerDBEntities();
    
        // Contact methods
        public Contact GetContact(int id)
        {
            return (from c in _entities.ContactSet.Include("Group")
                    where c.Id == id
                    select c).FirstOrDefault();
        }
    }
    

    public class EntityContactManagerRepository
        : ContactManager.Models.IContactManagerRepository
    {    
        // Contact methods
        public Contact GetContact(int id)
        {
           using (var entities = new ContactManagerDBEntities())
               return (from c in entities.ContactSet.Include("Group")
                   where c.Id == id
                   select c).FirstOrDefault();
        }
    }
    

    Stephen Walthe

    3 回复  |  直到 15 年前
        1
  •  31
  •   Craig Stuntz    17 年前

    这确实很重要,因为上下文控制着更改跟踪数据的生命周期,也会影响编辑对象时可以链接在一起的对象实例,因为两个不同上下文中的对象不能相互关联。在我看来,你分享的例子来自ASP。NET MVC应用程序。在这种情况下,我通常为每个请求使用一个实体上下文,因为请求是短暂的,而且在更新请求中的对象时,必须获取其他对象并在它们之间创建关系是很常见的。

    这似乎是“每个类一个上下文”选项的论据,但事实并非如此。这更像是“每单位工作一个上下文”的论点

        3
  •  2
  •   NightOwl888 Jabrwoky    14 年前

    好吧,“最好”的方法总是主观的。但是,在项目中添加UnitOfWorkScope类可以大大简化事情,即您不必过多考虑创建对象上下文或将工作单元持久化回数据库。

    有一篇很棒的文章解释了 How To Create a Unit of Work Scope .