我有一个数据库,我需要在将Web应用程序发布到远程服务器时进行更新。我希望拥有本地版本的数据库和远程(已发布)版本,因此我可以对本地版本进行架构更改,而不会影响已发布的数据库。
我最初在项目的本地副本中使用了远程数据库连接字符串,并且发布正常。我已经将此连接字符串更改为本地数据库,并在我的发布设置中指定了远程连接字符串,同时勾选了“在运行时使用此连接字符串”和“更新数据库”选项。
现在,当我尝试发布时,我收到此错误:
Web deployment task failed. (Could not generate deployment script.
Internal Error. The database platform service with type Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider is not valid. You must make sure the service is loaded, or you must provide the full type name of a valid database platform service.
Internal Error. The database platform service with type Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider is not valid. You must make sure the service is loaded, or you must provide the full type name of a valid database platform service.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_EXECUTING_METHOD.)
两个连接字符串都是有效的 - 我已经使用它们更新了两个数据库。我只使用远程连接字符串成功发布。当我在本地Web.config中提到不同的连接字符串(即我的本地数据库)时,它似乎只会失败。如果我将本地Web.config连接字符串更改回远程字符串,它将再次起作用。
如果这是重复的道歉 - 我已经在线查看了解决方案,但没有找到任何与我遇到的相似的内容。
答案 0 :(得分:0)
我认为问题的一部分是数据库是本地的,并且在连接字符串中使用(LocalDb) - 我认为这在发布时无法连接。我将其更改为另一台服务器上的数据库,并手动将发布设置编辑为(有效)这些设置,现在它可以正常工作。
.pubxml文件:
<ObjectGroup Name="SomeDatabaseContext" Order="1" Enabled="True">
<Destination Path="Data Source=TestServer;Initial Catalog=SomeDatabase;Persist Security Info=True;User ID=AppUser;Password=SomePassword;Application Name=EntityFramework" Name="Data Source=TestServer;Initial Catalog=SomeDatabase;Persist Security Info=True;User ID=AppUser;Password=SomePassword;MultipleActiveResultSets=True;Application Name=EntityFramework" />
<Object Type="DbDacFx">
<PreSource Path="Data Source=DevServer;Initial Catalog=SomeDatabase.dev;Persist Security Info=True;User ID=AppUser;Password=SomePassword;Application Name=EntityFramework" includeData="False" />
<Source Path="$(IntermediateOutputPath)AutoScripts\ECommerceSiteContext_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" />
</Object>
<UpdateFrom Type="Web.Config">
<Source MatchValue="Data Source=DevServer;Initial Catalog=SomeDatabase.dev;Persist Security Info=True;User ID=AppUser;Password=SomePassword;Application Name=EntityFramework" MatchAttributes="$(UpdateFromConnectionStringAttributes)" />
</UpdateFrom>
</ObjectGroup>
的Web.config:
<connectionStrings>
<add name="SomeDatabaseContext" connectionString="Data Source=DevServer;Initial Catalog=SomeDatabase.dev;Persist Security Info=True;User ID=AppUser;Password=SomePassword;Application Name=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
这样做允许我在网站上工作时使用数据库的开发版本(可能需要更改数据库模式)而不影响测试(已发布)版本,并允许我发布更改而不必记住发布时对测试数据库的Update-Database
。