0

使用 EF6 代码优先迁移,我能够成功保存模型并为它们创建新的迁移。但是,我的 DbContext 类在一个Sharp.Data项目中,实际的(Sql CE)数据库位于Sharp.Server项目 bin 文件夹下,而我的模型位于一个Sharp.Common项目中。

当我运行时add-migration -ProjectName Sharp.Data Migration3(指向Sharp.DataDbContext 所在的位置),它成功运行并识别对Sharp.Common项目中模型所做的更改。但是,当我运行时update-database -ProjectName Sharp.Data,它会更新/创建/迁移/播种位于我Sharp.Data项目的 bin 文件夹下的新数据库,而不是Sharp.Server应用程序最终从中读取数据的地方。

有没有办法做到这一点?让迁移生成/更新存在于其自己项目文件之外的其他地方的数据库?这可能是使用 SQL CE 的遗留物,但出于各种原因,它是我选择的数据库。

4

2 回答 2

1

您可以将额外的参数传递给update-database允许:

  • 指定不同的连接字符串
  • 生成一个 SQL 脚本,您可以将其应用于目标数据库

的完整语法Update-Database

Update-Database [-SourceMigration <String>] [-TargetMigration <String>]
[-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] 
[-ConfigurationTypeName <String>] [-ConnectionStringName <String>] 
[<CommonParameters>]

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] 
[-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] 
[-ConfigurationTypeName <String>] -ConnectionString <String> 
-ConnectionProviderName <String> [<CommonParameters>]

要指定连接字符串(指向项目中的正确文件夹):

  • -StartUpProjectName-ConnectionStringName, 指定一个包含 .config 文件的项目,该文件带有一个提供名称的连接字符串(第一种语法)
  • -ConnectionString, 直接指定连接字符串(第二种语法)

要创建可以使用其他工具直接应用于数据库的 SQL 脚本:

  • -SourceMigration:目标数据库中的当前迁移-TargetMigration:要更新到的迁移,以及-Script:生成可以手动应用的脚本
于 2014-05-14T10:20:03.937 回答
0

@JotaBe 的回答是正确的。但总而言之,您需要执行以下操作:

add-migration "MigrationName" -ProjectName Sharp.Data -ConnectionString "ConnectionStringToYourTargetDatabaseHere"
于 2014-05-18T15:49:17.753 回答