我在使用EF5时遇到了一些上下文问题。我还在研究这个问题,但我认为用单例模式实现我的DataContext类是个好主意,以便让不同的实体存储库使用相同的对象。是自杀还是有意义的? 另一个想法是在这里实现一个ContextManager:http://www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-N-tier-En(但我仍在检查他的代码,我还没有深入理解它。)
您怎么看?
- 编辑 -
在Web应用程序中,我正在为我必须管理的每个实体实现一个存储库
public DataContext : DbContext
{
//...
}
解决方案1 :很好,但如果我需要在一次调用中进行多次操作,即插入和删除,我会对db进行两次调用,我认为。
public Entity1Repository
{
public void Add(Entity1 entity)
{
using(DataContext context = new DataContext())
{
context.Entity1.Add(entity);
context.SaveChanges();
}
}
public void Delete(Entity1 entity)
{
using(DataContext context = new DataContext())
{
context.Entity1.Remove(entity);
context.SaveChanges();
}
}
}
解决方案2 :在这种情况下,我想我只有一次调用db,但我需要记得调用Dispose()
public Entity1Repository
{
private DataContext context;
public void Add(Entity1 entity)
{
context.Entity1.Add(entity);
}
public void Save()
{
context.SaveChanges();
}
public void Dispose()
{
context.Dispose();
}
}
哪种方法最好? (如果我理解正确,单身人士不是一个好人)
答案 0 :(得分:0)
我建议您通过构造函数注入(依赖注入)共享dbcontext。
然后我会使用IoC将上下文注入到容器中,每个请求都有生命周期。然后,为Web中的每个请求创建dbcontext,并在该请求期间与每个存储库共享,然后在请求之后处理。
Mark seemann有一本关于依赖注入和实例的好书。 http://www.manning.com/seemann/
希望这有助于您入门。