实体框架6(EF6)代码首先与单独项目中的模型进行迁移

时间:2014-05-13 02:29:41

标签: ef-code-first sql-server-ce ef-migrations entity-framework-6.1

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

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

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

2 个答案:

答案 0 :(得分: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:生成可以手动申请的脚本

答案 1 :(得分:0)

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

add-migration "MigrationName" -ProjectName Sharp.Data -ConnectionString "ConnectionStringToYourTargetDatabaseHere"