ASP.NET MVC 3使用带有EF的DI和存储库实现工作单元

时间:2012-01-30 01:50:37

标签: asp.net-mvc-3 entity-framework repository ninject unit-of-work

因此,我正在尝试在系统的设计阶段实施最佳实践。我将使用带有Entity Framework 4,ASP.NET MVC 3 C#的DI容器(ninject)以及工作模式的存储库/单元。

  • 我将建立模型,其中每个数据库的表都映射到类。
  • 我将在web.config中为每个数据库建立一个连接字符串。
  • 我将为每个连接字符串创建一个类(使用EF约定命名相同),它继承自DbContext并为每个表都有一个DbSet。
  • 我将为约定ITRepository命名的每个数据库实体提供一个抽象存储库接口,其中T是DataBase实体的名称(数据库实体Car的ICarRepository)。每个存储库接口都将保存实体的IQueryable,并定义应该公开的方法。
  • 我将拥有一个具体的存储库EFTRepository,它继承自ITRepository并定义公开方法的工作方式。
  • 我将定义一个GenericRepository<TEntity>,用于只需要极少访问的实体,例如基本的CRUD。
  • 我将使用ninject中的ControllerFactory作为DI容器。
  • 我将在Application_Start()中附加ninject控制器工厂。
  • 我将在工厂的AddBindings()方法中绑定所有依赖项,例如Bind<ITRepository>().To<EFTRepository>()
  • 我将为每个数据库实现一个工作单元模式,并保持命名约定UnitOfWorkDB(UnitOfWorkAutomobile for database Automobile)。
  • 工作单元将保存相关的数据库上下文和存储库。
  • 我这样做了吗?我之前没有使用过这套模式,并且想确保我将正确使用它们。批评欢迎!

    1 个答案:

    答案 0 :(得分:3)

    从基础存储库继承可以提供一些简单的“通用”功能,但在其他情况下,您会很快发现尝试拥有基于通用的存储库会变得很混乱(假设这是继承的)。

    你描述的其他一切看起来都不错。

    你没有说明会注入什么,但我假设你将注入一项服务,该服务将需要一个工作单元(例如IUnitOfWork,作为每个请求实例创建)和一个IWhateverRepostory