Mar*_*ter 3 c# linq-to-entities data-access-layer objectcontext
我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理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();
}
}
Run Code Online (Sandbox Code Playgroud)
或这个?
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();
}
}
Run Code Online (Sandbox Code Playgroud)
ObjectContext意味着"工作单元".
基本上这意味着对于每个"操作"(例如:每个网页请求),应该有一个新的ObjectContext实例.在该操作中,应重用相同的ObjectContext.
当您考虑它时,这是有道理的,因为事务和更改提交都与ObjectContext实例相关联.
如果您没有编写Web应用程序,而是编写WPF或Windows窗体应用程序,它会变得有点复杂,因为您没有网页加载为您提供的紧密"请求"范围,但你明白了.
PS:在您的任何一个示例中,ObjectContext的生命周期将是全局的或瞬态的.在这两种情况下,它都不应该存在于DataAccess类中 - 它应该作为依赖项传递