Rus*_*ino 5 entity-framework-4 asp.net-mvc-3
只是想知道,在带有实体框架的ASP.NET MVC3环境中。工作单元应该指向服务层还是存储库(然后存储库指向服务层)?
我看过两个例子:
链接:实体框架4 CTP 4 / CTP 5通用存储库模式和可测试的单元
不使用服务层,但显然可以在这种情况下使用。
链接:http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit- of-work-patterns-with-entity-framework-4-0.aspx
有什么会更好?
谢谢。
事实上,如果你仔细想想,控制器应该与工作单元一起工作。
通常,在 ASP.NET MVC 应用程序中,当 HTTP 请求传入时,控制器会被分配一个新的工作单元。
然后,控制器将调用服务上的方法(调用存储库上的方法),获取实体框架内部图形/内存并对其进行更改。
一旦控制器完成了它需要做的事情,它将对工作单元执行“提交”,这会导致对底层存储库的任何更改都提交到数据库。
我假设当您谈论“服务”时,您的控制器和存储库之间有一个中间层,其中控制器仅与服务通信,然后服务与存储库通信,然后备份应用程序堆栈。
所以你的控制器可能看起来像这样:
public class ProductsController : Controller
{
private IUnitOfWork _unitOfWork;
private IProductsService _service;
public ProductsController(IUnitOfWork unitOfWork, IProductsService service)
{
// use dependency injection here
_unitOfWork = unitOfWork;
_service = service;
}
[HttpPost]
public ActionResult SubmitOrder(Product p)
{
var existingProduct = _service.FindById(p.ProductId);
UpdateModel(existingProduct);
_unitOfWork.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数 EF4 场景中,工作单元被实现为 ObjectContext 的包装器。换句话说,工作单元上的“Commit”方法将简单地在 ObjectContext 上执行“SaveChanges”。
因此,工作单元并不真正指向服务或存储库。它只是与所管理的持久性机制一起工作。
我不确定你所说的“指向”是什么意思,但我认为事务是服务层的责任,而不是持久性。
持久性对象无法知道它是否是更大工作单元的一部分。负责的服务具有对构成工作单元的所有模型和持久性对象的引用。该服务还负责代表持久性对象管理来自池的连接。获取连接,打开事务,执行工作,提交或回滚事务,然后关闭连接。这就是服务的工作。
| 归档时间: |
|
| 查看次数: |
2622 次 |
| 最近记录: |