我有VS2012 MVC4解决方案(EF5)。编码时,我使用安装在同一台机器上的SQL Express的个人计算机。每次我需要向公司发布更新时,我都会创建一个包(.zip),然后在公司的IIS上导入此包(不能从我的开发计算机访问)。每次我在公司的IIS服务器上发布我的解决方案时,我都会重新创建整个数据库。那是过去......
现在,我更改了解决方案并使用Code First Migrations。当需要(实体已更改)时,由于“程序包管理器控制台”(Update-Database),我更新了本地数据库。
我的问题:如何在公司的IIS上更新数据库?
我在解释页面(http://msdn.microsoft.com/en-us/library/dd465337.aspx)上看到了下面的截图,但是当我在VS2012上打开发布向导时,我没有相同的屏幕。
以下是文档页面上显示的屏幕:
以下是我的屏幕:
非常感谢任何帮助。
答案 0 :(得分:7)
您可以通过编辑Properties \ YourProject - WebDeploy.pubxml查找PublishDatabaseSettings来启用该复选框
<PublishDatabaseSettings>
<Objects xmlns="">
<ObjectGroup Name="Namespace.Models.YourDBClass" Order="1" Enabled="True">
<Destination Path="your-connection-string-goes-here" />
<Object Type="DbCodeFirst">
<Source Path="DBMigration" DbContext="Namespace.Models.YourDBClass, AssamblyName" MigrationConfiguration="Namespace.Migrations.Configuration, Assambly" Origin="Convention" />
</Object>
</ObjectGroup>
</Objects>
</PublishDatabaseSettings>
通过继承DbContext的类更改Namespace.Models.YourDBClass,更改Namespace.Migratins.Configuration以适合您的迁移配置命名空间,并使用您的Assambly名称更改Assambly。
保存并打开您将拥有该复选框的发布向导。
希望有帮助
答案 1 :(得分:5)
我也看到过这种情况。我不确定部署工具用于识别EF存在的启发式方法,但该选项偶尔出现。
发布工具的功能很容易复制。您可以在web.config文件(或web.config.release中的转换)中指定数据库初始化程序以运行迁移。它看起来像下面这样(对于转换):
<entityFramework>
<contexts xdt:Transform="Insert">
<context type="PlantonDbContextName, PlantonAssemblyName">
<databaseInitializer
type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[
[PlantonDbContextName, PlantonAssemblyName],
[PlantonConfigurationName, PlantonAssemblyName]
], EntityFramework" />
</context>
</contexts>
</entityFramework>
配置文件中的泛型很难看,但您也可以在代码中设置初始值设定项:http://msdn.microsoft.com/en-us/library/hh829293(v=vs.103).aspx
希望有所帮助。
答案 2 :(得分:1)
让我采取刺痛并提出一个问题:
这是以前的VS2010项目吗? : - )
我问,因为转换过程无法将VS2010升级到VS2012并保持发布配置文件不变。编辑太多了。
最好的办法是删除您拥有的任何现有发布配置文件(文件)并重新创建新的发布配置文件。
确保首先通过Ode的答案指定正确的EF上下文。发布向导需要能够在创建配置文件之前查看您的上下文。
Entity Framework Code First Data Migrations not working with VS2012 Web Deploy