方法1
public class MyEntityRepository
{
private MyEntityContainer datacontext = new MyEntityContainer();
public IQuarable<VMModel1> Method1()
{
//datacontext used here in linq query
}
public IEnumerable<VMModel2> Method2()
{
//datacontext used here in linq query
}
}
方法2
public class MyEntityRepository
{
public IQuarable<VMModel1> Method1()
{
using (var context = new MyEntityContainer())
{
// Perform data access using the context
}
}
public IEnumerable<VMModel2> Method2()
{
using (var context = new MyEntityContainer())
{
// Perform data access using the context
}
}
}
我的问题是哪种方法更好,使用每种方法的利弊
答案 0 :(得分:0)
实际上我更喜欢每个HTTP请求的ObjectContext 。每个请求的共享上下文解决了管理附加实体的问题。至于你只有一个上下文,你根本不用担心它。管理上下文范围更容易:在请求结束时只需SaveChanges和Dispose it。
以下是它的工作原理:
public abstract class AbstractRepository<T> where T : class
{
/// <summary>
/// Common context per request
/// </summary>
protected static ocm Context
{
get
{
if (HttpContext.Current != null)
{
var db = HttpContext.Current.Items["DbContext"] as MyObjectContext
if (db == null)
{
db = new MyObjectContext();
HttpContext.Current.Items.Add("DbContext", db);
}
return db;
}
return new MyObjectContext();
}
}
public T Get(decimal id)
{
return Context.Set<T>().Find(id);
}
public virtual T Get(int id)
{
return Context.Set<T>().Find(id);
}
public List<T> GetAll()
{
return Context.Set<T>().ToList();
}
public void Add(T obj)
{
Context.Set<T>().Add(obj);
}
public void Remove(T obj)
{
Context.Set<T>().Remove(obj);
}
public void Attach(T obj)
{
Context.Set<T>().Attach(obj);
}
public void SaveChanges()
{
Context.SaveChanges();
}
}
如果您对上下文的使用或处理有疑问,请与我们联系。