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

Kev*_*xes 10 c# entity-framework-4 ef-migrations

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

project1(solution)
|->Model(project)
|->DataAccess(project)
|->project1(project)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


编辑:

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

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyConfiguration>());
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Error   2   'DataAccess.Migrations.Configuration' is inaccessible due to its protection level
Run Code Online (Sandbox Code Playgroud)

Jim*_*mmy 12

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

Enable-Migrations -EnableAutomaticMigrations -ProjectName DataAccess -StartupProjectName project1

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

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

  • 把它公之于众
  • 在DataAccess项目中的某处设置DB初始化程序
  • 在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>
    
    Run Code Online (Sandbox Code Playgroud)