在代码中执行代码第一次迁移?
问题描述:
我正在开发一个多租户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?
我用你的方法看到的问题是,会 你不得不“独立”的账户模型/数据库 - 和你正在尝试迁移的那个。既然你提到多租户,可能已经是这种情况。
但我想你也可以克隆帐户等的“基础实体” - 然后将其余的迁移到顶端。这有点复杂 - 模型在开始(第一次使用)时创建一次(每次连接)并从此开始缓存。所以唯一的办法是重新启动重新加载,我认为(不要因为它而坚持我的话,只是在这里大声思考)
答
不知道这是否是你问什么,你可以在命令行中运行代码迁移:
packages\EntityFramework.5.0.0\tools\migrate.exe Example.dll /startUpDirectory:Example\bin
所以理论上你可以调用这个每当有新客户签订了协议。
我想我所要做的就是使用迁移的基础实体,如帐户和然后运行SQL脚本来创建特定于模式的模式和其他表。有两个不同的迁移班将会很好。 – Mike 2013-05-01 18:58:13
有效地回答你的主要问题(用自定义初始值设定项) - 但其余的内容太具体了,我几乎不能告诉你任何比我已经做过的更明智的事情。至于“两个不同的......”,迁移主要是“singleton”(迁移==你的配置+脚本+连接+ Db + __MigrationHistory sys表)。我认为你可以在两个库中有两个,但是你必须有'两个db -s'(导致db中的迁移表)。这不是多租户(它来自EF6)。 – NSGaga 2013-05-02 13:31:03