使用EF更改跟踪设计正确的ASP.Net mvc存储​​库模式?

时间:2015-04-17 18:06:22

标签: c# asp.net asp.net-mvc design-patterns

我目前正在使用存储库模式的ASP.net MVC,当我们需要审核每个实体时会出现问题。

我决定利用可以跟踪实体活动的更改跟踪功能,问题是当我们需要在一个控制器中将多个存储库与其私有上下文对象联系起来时,实体更改跟踪器不支​​持。 例如:

public SalesOrderController(INumberingRepository NumberRepository, IProductRepository ProductRepository, ISalesOrderRepository SalesOrderRepository)
{
    this.productRepository = ProductRepository;
    this.salesOrderRepository = SalesOrderRepository;
    this.numberRepository = NumberRepository;
}

每个存储库都有自己的上下文。

是否有任何参考设计,以便实体框架更改跟踪器功能可以愉快地使用多个存储库上下文?

1 个答案:

答案 0 :(得分:0)

如果您通过IoC将上下文对象生命周期设置为Per HttpRequest,那么您可以将每个HttpRequest和每个.SaveChanges()执行所有数据库调用作为一个事务。而不是每个存储库的私有上下文,将上下文注入存储库。

如果是Structuremaps,

   For<DbContext>().LifecycleIs(new HybridLifecycle()).Use(c=> new DbContext());