0

J'ai une base de données que je dois mettre à jour lors de la publication de l'application Web sur un serveur distant. Je veux avoir une version locale de la base de données et une version distante (publiée), donc je peux faire des changements de schéma à la version locale sans affecter la base de données publiée.Comment mettre à jour une base de données pendant la publication en utilisant une chaîne de connexion différente

J'ai initialement utilisé la chaîne de connexion db distante dans la copie locale de mon projet, et elle a été publiée correctement. Depuis, j'ai changé cette chaîne de connexion en une base de données locale et spécifié la chaîne de connexion distante dans mes paramètres de publication, en cochant les options 'Utiliser cette chaîne de connexion à l'exécution' et 'Mettre à jour la base de données'.

Maintenant, lorsque je tente de publier, je reçois cette erreur:

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.) 

Les deux chaînes de connexion sont certainement valables - je l'ai mis à jour les bases de données les utiliser. J'ai publié avec succès en utilisant seulement la chaîne de connexion à distance. Il semble seulement échouer quand j'ai une chaîne de connexion différente (c'est-à-dire ma base de données locale) mentionnée dans mon Web.config local. Si je change ma chaîne de connexion Web.config locale à la chaîne distante, cela fonctionne à nouveau.

Excuses s'il s'agit d'un doublon - J'ai jeté un coup d'oeil en ligne pour la solution, mais je n'ai rien trouvé qui ressemble à ce que je vis.

Répondre

0

Je pense qu'une partie du problème était que la base de données était locale, et en utilisant (LocalDb) dans la chaîne de connexion - je suppose que cela ne pouvait pas être connecté lors de la publication. J'ai changé cela en une base de données sur un autre serveur, et édité manuellement les paramètres de publication pour (effectivement) ces paramètres, et cela fonctionne maintenant comme je le voulais.

fichier .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> 

Faire cela me permet d'utiliser une version dev de la base de données alors que je travaille sur le site (potentiellement besoin de changement le schéma de base de données) sans affecter la version de test (publiée), et me permet de publier des modifications sans avoir à se souvenir de Update-Database contre la base de données de test lors de la publication.