Asp.net mvc 实体框架上下文?
我真的很难找到在MVC应用程序中管理EF上下文的位置 我正在使用Service/Repository/EF方法,并在其中使用UnitOfWork模式和上下文,然后在控制器操作中使用它来利用各种服务。它是有效的,但通过这样做,我使控制器依赖于EF,对吗Asp.net mvc 实体框架上下文?,asp.net-mvc,entity-framework-4,repository-pattern,unit-of-work,Asp.net Mvc,Entity Framework 4,Repository Pattern,Unit Of Work,我真的很难找到在MVC应用程序中管理EF上下文的位置 我正在使用Service/Repository/EF方法,并在其中使用UnitOfWork模式和上下文,然后在控制器操作中使用它来利用各种服务。它是有效的,但通过这样做,我使控制器依赖于EF,对吗 有什么建议吗?如果您依赖抽象并创建一个IUnitOfWork和IRepository来封装EF上下文,那么控制器将依赖于抽象,而不是任何具体的实现 存储库和工作单元本身是唯一依赖于实体框架或您正在使用的任何ORM的类 public class My
有什么建议吗?如果您依赖抽象并创建一个IUnitOfWork和IRepository来封装EF上下文,那么控制器将依赖于抽象,而不是任何具体的实现 存储库和工作单元本身是唯一依赖于实体框架或您正在使用的任何ORM的类
public class MyController : Controller
{
public MyController(IRepository r1, IRepository r2, IUnitOfWork uow)
{ ... }
[HttpPost]
public ActionResult SomeAction(Model data)
{
_r1.DoSomeChangesToEntities(data);
_r2.DoSomeChangesToEntities(data);
_uow.SaveChanges();
return View(...);
}
}
根据请求编辑:
一个简单的工作实施单元可以是:
public class EFUnitOfWork : IUnitOfWork
{
private DataContext _context;
public EFUnitOfWork(DataContext context)
{
_context = context;
}
public void Commit()
{
_context.SubmitChanges();
}
}
当然,您可以通过向服务/存储库中注入相同的上下文来确保您的服务/存储库使用与工作单元相同的上下文。这取决于您所说的“使控制器依赖于EF”是什么意思 在控制器中是否使用任何EF相关类?如果不是,它们显然不依赖于EF,您可以轻松地将存储库和工作单元交换给其他实现(例如使用NHibernate)
但是,是的,如果您在任何层中使用asp.net mvc应用程序,它都依赖于EF。如果不加载EF DLL,它将无法运行。查看位于@PH的示例代码-您能告诉我IUnitOfWork是什么样子吗?@Sam-添加了Unitofwork示例,虽然这在理论上可以回答这个问题,在这里包括答案的关键部分,并提供链接供参考。那么UnitOfWork应该在哪一层中生存?@Sam:我想你在过去几天里已经问过好几次了,你得到了答案。检查一下。没有理由每天再问一次。