使用 EF 更改跟踪设计正确的 ASP.Net mvc 存储库模式?
Designing the right ASP.Net mvc repository pattern with EF change tracking?
我目前正在使用 ASP.net 具有存储库模式的 MVC,当我们需要审核每个实体时就会出现问题。
我决定利用可以跟踪实体的更改跟踪功能 activity,问题是当我们需要在一个控制器中涉及多个存储库及其私有上下文对象时,实体更改不支持跟踪器。
示例:
public SalesOrderController(INumberingRepository NumberRepository, IProductRepository ProductRepository, ISalesOrderRepository SalesOrderRepository)
{
this.productRepository = ProductRepository;
this.salesOrderRepository = SalesOrderRepository;
this.numberRepository = NumberRepository;
}
因此每个存储库都有自己的上下文。
是否有任何参考设计使 entity framework 更改跟踪器功能可以在多个存储库上下文中愉快地工作?
如果您通过 IoC 将上下文对象生命周期设置为 Per HttpRequest,那么您可以将所有数据库调用作为每个 HttpRequest 和每个 .SaveChanges() 的一个事务来执行。而不是每个存储库的私有上下文,而是将上下文注入存储库。
如果是结构图,
For<DbContext>().LifecycleIs(new HybridLifecycle()).Use(c=> new DbContext());
我目前正在使用 ASP.net 具有存储库模式的 MVC,当我们需要审核每个实体时就会出现问题。
我决定利用可以跟踪实体的更改跟踪功能 activity,问题是当我们需要在一个控制器中涉及多个存储库及其私有上下文对象时,实体更改不支持跟踪器。 示例:
public SalesOrderController(INumberingRepository NumberRepository, IProductRepository ProductRepository, ISalesOrderRepository SalesOrderRepository)
{
this.productRepository = ProductRepository;
this.salesOrderRepository = SalesOrderRepository;
this.numberRepository = NumberRepository;
}
因此每个存储库都有自己的上下文。
是否有任何参考设计使 entity framework 更改跟踪器功能可以在多个存储库上下文中愉快地工作?
如果您通过 IoC 将上下文对象生命周期设置为 Per HttpRequest,那么您可以将所有数据库调用作为每个 HttpRequest 和每个 .SaveChanges() 的一个事务来执行。而不是每个存储库的私有上下文,而是将上下文注入存储库。
如果是结构图,
For<DbContext>().LifecycleIs(new HybridLifecycle()).Use(c=> new DbContext());