verwendetes Datenbanksystem: <MS SQL Server 2016>
Hallo zusammen,
ich habe folgendes Problem:
Ich habe 2 identische Web Application in Azure gehostet. Der einzige "Unterschied" ist, dass beide Application auf unterschiedliche SQL Server zugreifen. Wie kann man das am besten lösen dass ich lokal nicht mit 2 Kopien arbeiten muss ?
Ich denke die beste Lösung ist den unterschiedlichen Connection String in Azure in die Anwendungseinstellungen/Verbindungszeichenfolgen/SQL-Server einzutragen. Habe dazu nur eine Anleitung gefunden: https://azure.microsoft.com/de-de/blog/windows-azure-web-sites-how-application-strings-and-connection-strings-work/
Habe ich das richtig verstanden dass dann der Connection String in der web.config überschrieben wird ? Wie muss dass denn dann in der web.config aussehen ?
Danke
Michael
Ja, das ist der korrekte Weg.
Die Web.Config stellt den default dar.
Stellst Du nichts in den Azure Settings ein, dann gilt der Wert in der Web.Config.
Setzt Du einen Wert, dann wird der in den Umgebungsvariablen der Anwendung überschrieben.
Der Web.Config Eintrag ändert sich aber nicht.
Die Umgebungsvariablen der Anwendung, also die Settings, die tatsächlich gezogen werden, siehst Du im Azure Portal in der WebApp im Reiter "Kudu".
Die URL ist dann sowas wie https://<name>.scm.azurewebsites.com/env
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke.
Mein Connection String in der Web.config sieht folgendemaßen aus (sensible Daten hab ich durch * ersetzt):
<add name="***" connectionString="metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/Models.***.msl;provider=System.Data.SqlClient;provider connection string="data source=***.database.windows.net;initial catalog=***;persist security info=True;user id=***;password=***;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Was muss ich denn in Azure jetzt als "Name" und "Wert" eintragen ?
Danke
Michael
Alles innerhalb des Attributs connectionString
ist der Wert.
Das sieht bei Dir eben so viel aus, weil Du noch mit Entity Framework EDMX arbeitest.
PS: Dein EDMX-Feature ist für zukünftige Versionen des EF bereits abgekündigt (schon länger).
Das also als Info, dass Du Dir evtl. da irgendwas was Neues einplanen musst.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke,
eventuell hast du noch einen Tipp was hier falsch läuft ? Ich bekomme die Fehlermeldung:
System.ArgumentException: Keyword not supported: 'metadata'.
Michael
Der Fehler taucht eigentlich auch nur im Zusammenhang mit EDMX auf.
Und zwar wenn man im ProviderName
statt System.Data.EntityClient
einfach System.Data.SqlClient
stehen hat.
Letzteres kann mit einem EF ConnectionString für EDMX nichts fangen und es kommt zu dieser Fehlermeldung.
Sicher, dass Du den ConnectionString korrekt im Azure Portal hinterlegt hast?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Also exakt drinstehen habe ich unter
Name: Entities
Wert: metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.EntityClient;provider connection string="data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=*;MultipleActiveResultSets=True;App=EntityFramework
Bei Provider stand vorher System.Data.SqlClient, das hab ich nach deinem Post geändert. Ändert aber nichts an der Fehlermeldung.
Michael
Nein, im ConnectionString
selbst muss natürlich SqlClient steht, weil EF hier natürlich mit SQL arbeitet.
So wie es auch in Deiner <add-
Teile zu sehen ist. Bei EDMX hast Du immer quasi ein "ConnectionString im ConnectionString".
Aber in der Config muss trotzdem als ProviderName
wie gesagt EntityClient
stehen, wie es weiter oben in Deiner <add..>-Zeile auch zu sehen ist.
Und das löst _eigentlich _diesen Fehler aus.
Deinem ConnectionString, wenn ich das so vergleiche, fehlt aber das abschließende "
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ok, bei Wert steht jetzt drin:
metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.SqlClient;provider connection string="data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=**;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"
Fehler bleibt der gleiche
Wenn ich nur das nehme was in connectionstring drinsteht:
metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.SqlClient;provider connection string="data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=**;MultipleActiveResultSets=True;App=EntityFramework"
Fehler bleibt der gleiche
Vielleicht hilft die Info wie es in Kudu drinsteht:
SQLAZURECONNSTR_Entities = metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.SqlClient;provider connection string="data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=*;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"
Michael
Auch nein.
Du darfst nur rein schreiben, was das Attribut connectionstring
vorsieht und nicht irgendwas erfinden, also wie oben:
metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/Models.***.msl;provider=System.Data.SqlClient;provider connection string="data source=***.database.windows.net;initial catalog=***;persist security info=True;user id=***;password=***;multipleactiveresultsets=True;application name=EntityFramework"
providername=EntityClient
ist nicht teil des ConnectionStrings.Ist es ja oben auch nicht.
Zudem sind wir hier ja nicht im XML und müssen daher auch nichts escapen; daher wird vermutlich kein quot gebraucht.
metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/Models.***.msl;provider=System.Data.SqlClient;provider connection string="data source=***.database.windows.net;initial catalog=***;persist security info=True;user id=***;password=***;multipleactiveresultsets=True;application name=EntityFramework"
Als Typ sollte evtl. mal Custom probiert werden statt SQL Server/SQL Database.
Ist ja ein ConnectionString der nur valide für das EF ist und nicht für SQL Standalone.
Warum Du einmal App=EntityFramework und einmal application name=EntityFramework hast, ist mir jetzt nicht ersichtlich.
Ansonsten gehen zumindest jetzt auch mir die Ideen hier aus.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Das Custom war die entscheidende Änderung. Schade aber auch dass Google da gar kein Ergebnis bringt. EF ist ja nun nichts seltenes.
Danke
Michael