【问题标题】:Execute code first migration in code?在代码中执行代码第一次迁移?
【发布时间】:2013-05-01 15:21:23
【问题描述】:

我正在开发一个多租户 MVC 4 应用程序,并且我将采用每个客户一个模式的方法。当客户注册时,我想在代码中运行数据库迁移。这是否可以使用 EF 5/Code First 迁移?

所以当客户注册时,我会在 dbo 中创建一个帐户。然后,我将检查它们的子域是否作为架构存在于数据库中,如果不存在,我将创建架构并在理想情况下运行迁移。

谢谢!

澄清

当我在数据库中为客户创建新架构时,我想为该新架构运行迁移。比如,

我将拥有 schema1.Products 和 schema2.Products。

【问题讨论】:

    标签: asp.net-mvc-4 ef-code-first entity-framework-migrations


    【解决方案1】:

    如果我做对了你想要的......

    你可以使用这样的东西

    var migrator = new DbMigrator(new Configuration());
    if (migrator.GetPendingMigrations().Any())
        migrator.Update();  
    

    或者更好的是,您可能想要创建自己的initializer - 例如检查我的这些帖子...

    What is the correct use of IDatabaseInitializer in EF?

    How to create initializer to create and migrate mysql database?


    我在您的方法中看到的问题是 您必须“分离”帐户模型/数据库 - 以及您尝试迁移的那个。既然你提到了多租户,那可能已经是这种情况了。

    但我想您也可以为帐户等创建“基本实体”-然后将其余部分迁移到顶部。这是一个有点复杂的场景 - 模型在开始(第一次使用)时创建一次(每个连接)并从那时起缓存。所以唯一的办法就是重新加载,我认为(不要信守诺言,只是在这里大声思考)

    【讨论】:

    • 我认为我必须做的是对基本实体(如 Accounts)使用迁移,然后运行 ​​SQL 脚本来创建架构和其他特定于架构的表。最好有两个不同的迁移类。
    • 有效地回答了您的主要 Q(使用自定义初始化程序)-但是其余部分太具体了,我几乎无法告诉您任何比我已经做过的更明智的事情。至于two different...,迁移主要是“单例”(迁移==您的配置 + 脚本 + 连接 + Db + __MigrationHistory sys 表)。我认为您可以在两个库中拥有两个,但您必须拥有“两个 db-s”(由于 db 中的迁移表)。它不是多租户(在 EF6 中提供)。
    【解决方案2】:

    不确定这是否是您要求的,您可以从命令行运行代码迁移:

    packages\EntityFramework.5.0.0\tools\migrate.exe Example.dll /startUpDirectory:Example\bin
    

    所以理论上你可以在新客户注册时调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 2015-10-27
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多