关于依赖注入,IRepository和EF迁移方案

时间:2013-06-22 14:43:29

标签: entity-framework dependency-injection ef-migrations irepository

我对EF Migrations如何处理我的存储库是通用的( IRepository<> )并且由我选择的依赖注入工具在运行时注入的情况感到困惑。您知道迁移使用三个元素更新/同步数据库:

  1. 数据库模型(对象上下文和DbSet<>属性)
  2. 迁移文件夹内的迁移文件夹
  3. 现有数据库(如果有)
  4. 您可以看到基本元素是Object上下文及其属性。如果公开没有dbset属性的Object上下文,则不会以正确的方式执行Migrations使用的过程。

    我的解决方案包含以下项目:Core.Entities,Core.RepositoryInterfaces和Infraestructure.RepositoryEF,Infraestructure.DependencyResolution和UI.WebSite。

    如您所知,当我需要时,会在类构造函数中注入存储库:

      private IRepository<Product> _productrepo;  
      Public Test(IRepository<Product> productRepo)
      {
                _productRepo = productrepo;
       }
    

    问题是: 迁移如何更新数据库,因为我的Object上下文没有dbset&lt;&gt;属性(我的依赖工具在运行时注入这些存储库)?

    感谢您的宝贵帮助。

1 个答案:

答案 0 :(得分:1)

如果您有一个空的dbcontext对象(我的意思是没有dbset属性),我认为代码优先迁移不会更新您的模型。因此,处理这种情况的一种方法是使用存储库模式并将dbcontext objet注入每个请求的存储库:

设计两个dbcontext对象,一个用于开发时间(devdbcontext),另一个用于生产环境(proddbcontext)。

  1. Devdbcontext 将使用dbset属性设计, 这样,迁移工作流程在开发时间内是正常的; 它将检测模型更改并重新创建数据库等。 当您处于DEBUG模式(#if DEBUG)

  2. 时,将选择此对象
  3. Proddbcontext 将是一个派生的dbcontext对象 dbset属性,将在您进入时选择 RELEASE模式(#if RELEASE)。用于更新生产数据库I 将生成DATABASE SCRIPT并设置数据库initilializer 为NULL。

  4. 您如何看待这个解决方案?