我应该在哪个项目中启用迁移

时间:2012-11-06 05:43:18

标签: c# entity-framework-4 ef-migrations

我有一个wpf项目,结构如下:

project1(solution)
|->Model(project)
|->DataAccess(project)
|->project1(project)

Project1是我编译并将exe传递给用户的项目。

现在我想启用自动迁移:Enable-Migrations –EnableAutomaticMigrations

project1是默认项目。当我运行命令时,显然它无法找到位于DataAccess项目中的数据库上下文。我可以在DataAccess项目中启用它。

但这是对的吗?如何在project1项目中启用它?


编辑:

我想我可以在DataAccess项目中启用迁移,并将MyConfiguration引用回到DataAccess项目吗?

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyConfiguration>());

但是我收到了这个错误:

Error   2   'DataAccess.Migrations.Configuration' is inaccessible due to its protection level

1 个答案:

答案 0 :(得分:12)

您是否尝试过使用-StartupProjectName参数?

Enable-Migrations -EnableAutomaticMigrations -ProjectName DataAccess -StartupProjectName project1

最后一个参数指定模拟在该项目中运行,包括来自app.config / web.config的任何设置。

编辑:对于启用迁移,您看到的错误可能是因为默认情况下将MigrationsConfiguration创建为internal。你可以:

  • 公开
  • 在DataAccess项目中的某处设置数据库初始化程序
  • 在project1的app.config / web.config中设置它。即使类型是内部类型,它也会在运行时解析并仍然有效:

    <entityFramework>
      <contexts>
        <context type="DataAccess.FooContext, DataAccess">
          <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[DataAccess.FooContext, DataAccess], [DataAccess.Migrations.Configuration, DataAccess]], EntityFramework, PublicKeyToken=b77a5c561934e089">
          </databaseInitializer>
        </context>
      </contexts>
    </entityFramework>