我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理ObjectContexts. 这些通常是首选/推荐的: 这个 public class DataAccess{ MyDbContext m_Context; public DataAccess(){ m_Cont
这些通常是首选/推荐的:
这个
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类中 – 它应该作为依赖项传递