Joa*_*opf 21 entity-framework-4 ef-migrations
我正在尝试使用多个代码优先的DbContexts进行EF 4.3迁移.我的应用程序被分成几个插件,这些插件可能有关于其域的自己的DbContext.应用程序应该使用一个单独的sql-database.
当我尝试在空数据库中自动迁移上下文时,这仅对第一个上下文成功.每个其他上下文都需要将AutomaticMigrationDataLossAllowed-Property设置为true,然后尝试删除前一个的表.
所以我的问题是:
谢谢!
Anu*_*dey 32
这是你可以做的.非常简单.
您可以为每个上下文创建Configration类.例如
internal sealed class Configuration1 : DbMigrationsConfiguration<Context1>{
   public Configuration1 (){
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "YourProject.Models.ContextNamespace1";
   }
}
internal sealed class Configuration2 : DbMigrationsConfiguration<Context2>{
   public Configuration2 (){
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "YourProject.Models.ContextNamespace2";
   }
}
现在添加迁移.您不需要启用迁移,因为您已经使用上面的2类.
Add-Migration -configuration Configuration1 Context1Init
这将为context1创建迁移脚本.您可以再次为其他上下文重复此操作.
Add-Migration -configuration Configuration2 Context2Init
更新数据库
Update-Database -configuration Configuration1
Update-Database -configuration Configuration2
这可以按任何顺序完成.除非您需要确保按顺序调用每个配置.
Code First Migrations假定每个数据库只有一个迁移配置(每个配置一个上下文).
我可以想到两种可能的解决方案:
创建包含每个上下文的所有实体的聚合上下文,并从迁移配置类引用此"超级"上下文.这样,所有表都将在用户的数据库中创建,但数据只会在他们为其安装插件的数据中.
为每个上下文使用单独的数据库 如果您在上下文之间有共享实体,请添加自定义迁移并使用CreateTable(...)调用替换该调用以Sql("CREATE VIEW ...")从实体的"原始"数据库获取数据.
我会尝试#1,因为它将所有内容保存在一个数据库中.您可以在解决方案中创建一个单独的项目,以包含您的迁移和这个"超级"上下文.只需添加项目,引用所有插件项目,创建包含所有实体的上下文,然后在此新项目上调用Enable-Migrations.事情应该在那之后按预期工作.
| 归档时间: | 
 | 
| 查看次数: | 12242 次 | 
| 最近记录: |