问题描述
我是新来的实体框架,和我刚开始在我的空闲时间玩它。其中一个我的主要问题是关于如何处理ObjectContexts
这是一般首选/推荐这些:
这
公共类的DataAccess {
MyDbContext m_Context;
公共数据访问(){
m_Context =新MyDbContext();
}
公开的IEnumerable< SomeItem> GetSomeItems(){
返回m_Context.SomeItems;
}
公共无效DeleteSomeItem(SomeItem项目){
m_Context.DeleteObject(项目);
m_Context.SaveChanges();
}
}
或此?
公共类的DataAccess {
公共数据访问(){}
公IEnumerable的< SomeItem> GetSomeItems(){
MyDbContext背景=新的DbContext();
返回context.SomeItems;
}
公共无效DeleteSomeItem(SomeItem项目){
MyDbContext背景=新的DbContext();
context.DeleteObject(项目);
context.SaveChanges();
}
}
的。ObjectContext的,就是要在工作单位
从本质上讲这是什么意思是,每个操作(如:每个网页的请求)应该有新ObjectContext的实例。在该操作中,相同的ObjectContext应重新使用。
这是有道理的,当你想想看,作为交易和变更提交都绑在ObjectContext的实例。
如果你不写一个web应用程序,并且,而不是写一个WPF或Windows窗体应用程序,它变得更复杂一点,因为你没有。紧请求的范围,一个网页加载给你,但你的想法
PS:在任何一种你的例子,ObjectContext中的寿命要么是全球性的,或短暂。在这两种情况下,它不应该生活在数据访问类的内部 - 它应该是传递作为依赖
I'm new to the Entities Framework, and am just starting to play around with it in my free time. One of the major questions I have is regarding how to handle ObjectContexts.
Which is generally preferred/recommended of these:
This
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();
}
}
Or this?
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();
}
}
The ObjectContext is meant to be the "Unit of Work".
Essentially what this means is that for each "Operation" (eg: each web-page request) there should be a new ObjectContext instance. Within that operation, the same ObjectContext should be re-used.
This makes sense when you think about it, as transactions and change submission are all tied to the ObjectContext instance.
If you're not writing a web-app, and are instead writing a WPF or windows forms application, it gets a bit more complex, as you don't have the tight "request" scope that a web-page-load gives you, but you get the idea.
PS: In either of your examples, the lifetime of the ObjectContext will either be global, or transient. In both situations, it should NOT live inside the DataAccess class - it should be passed in as a dependency
这篇关于可重复使用的ObjectContext或每个组操作的新的ObjectContext?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!