10

我有一个 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
4

1 回答 1

12

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

Enable-Migrations -EnableAutomaticMigrations -ProjectName DataAccess -StartupProjectName project1

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

编辑:至于启用迁移,您看到的错误可能是因为 MigrationsConfiguration 默认创建为内部。您可以:

  • 公开
  • 在 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>
    
于 2012-11-06T06:05:06.727 回答