在代码中执行代码第一次迁移?

问题描述:

我正在开发一个多租户MVC 4应用程序,我将按照每个客户的方式使用一个模式。我想在客户注册时在代码中运行数据库迁移。这可能使用EF 5/Code First Migrations吗?在代码中执行代码第一次迁移?

所以当客户注册时,我会在dbo中创建一个帐户。然后我会检查他们的子域是否作为数据库中的模式存在,如果没有,我将创建模式并理想地运行迁移。

谢谢!

澄清

当我创建数据库中的客户新的模式,我要运行新的架构迁移。因此,例如,

我将有schema1.Products和schema2.Products。

如果我得到你想要什么样的权利?

你可以使用类似这样

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?


我用你的方法看到的问题是,会 你不得不“独立”的账户模型/数据库 - 和你正在尝试迁移的那个。既然你提到多租户,可能已经是这种情况。

但我想你也可以克隆帐户等的“基础实体” - 然后将其余的迁移到顶端。这有点复杂 - 模型在开始(第一次使用)时创建一次(每次连接)并从此开始缓存。所以唯一的办法是重新启动重新加载,我认为(不要因为它而坚持我的话,只是在这里大声思考)

+0

我想我所要做的就是使用迁移的基础实体,如帐户和然后运行SQL脚本来创建特定于模式的模式和其他表。有两个不同的迁移班将会很好。 – Mike 2013-05-01 18:58:13

+0

有效地回答你的主要问题(用自定义初始值设定项) - 但其余的内容太具体了,我几乎不能告诉你任何比我已经做过的更明智的事情。至于“两个不同的......”,迁移主要是“singleton”(迁移==你的配置+脚本+连接+ Db + __MigrationHistory sys表)。我认为你可以在两个库中有两个,但是你必须有'两个db -s'(导致db中的迁移表)。这不是多租户(它来自EF6)。 – NSGaga 2013-05-02 13:31:03

不知道这是否是你问什么,你可以在命令行中运行代码迁移:

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

所以理论上你可以调用这个每当有新客户签订了协议。