当前位置 : 主页 > 编程语言 > c语言 >

c# – 每个操作集的可重用ObjectContext或新的ObjectContext?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理ObjectContexts. 这些通常是首选/推荐的: 这个 public class DataAccess{ MyDbContext m_Context; public DataAccess(){ m_Cont
我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理ObjectContexts.

这些通常是首选/推荐的:

这个

public class DataAccess{

    MyDbContext m_Context;

    public DataAccess(){
        m_Context = new MyDbContext();        
    }

    public IEnumerable<SomeItem> GetSomeItems(){
        return m_Context.SomeItems;
    }

    public void DeleteSomeItem(SomeItem item){
        m_Context.DeleteObject(item);
        m_Context.SaveChanges();
    }
}

或这个?

public class DataAccess{

    public DataAccess(){ }

    public IEnumerable<SomeItem> GetSomeItems(){
        MyDbContext context = new DbContext();
        return context.SomeItems;
    }

    public void DeleteSomeItem(SomeItem item){
        MyDbContext context = new DbContext();
        context.DeleteObject(item);
        context.SaveChanges();
    }
}
ObjectContext意味着“工作单元”.

基本上这意味着对于每个“操作”(例如:每个网页请求),应该有一个新的ObjectContext实例.在该操作中,应重用相同的ObjectContext.

当您考虑它时,这是有道理的,因为事务和更改提交都与ObjectContext实例相关联.

如果您没有编写Web应用程序,而是编写WPF或Windows窗体应用程序,它会变得有点复杂,因为您没有网页加载为您提供的紧密“请求”范围,但你明白了.

PS:在您的任何一个示例中,ObjectContext的生命周期将是全局的或瞬态的.在这两种情况下,它都不应该存在于DataAccess类中 – 它应该作为依赖项传递

网友评论