c# – 每个操作集的可重用ObjectContext或新的ObjectContext?
发布时间:2020-12-16 01:31:44 所属栏目:百科 来源:网络整理
导读:我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理ObjectContexts. 这些通常是首选/推荐的: 这个 public class DataAccess{ MyDbContext m_Context; public DataAccess(){ m_Context = new MyDbContext(); } public IEnumerableSo
我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理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类中 – 它应该作为依赖项传递 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |