wake-up-neo.net

Wie wird die ASP.NET MVC-Datenbank von LocalDb nach SQL Server übertragen?

Ich habe ein neues ASP.NET MVC 5-Projekt in Visual Studio 2013 (Express für Web) erstellt. Standardmäßig verwendet das Projekt LocalDb als Datenbank. Aber wie wird die Datenbank zu SQL Server übertragen oder migriert?

Ich möchte SQL Server für die Datenbank anstelle von LocalDb verwenden. Aber wie?

32
doncadavona

Ich habs!

Basierend auf der Antwort von @ warheat1990 müssen Sie nur die Verbindungszeichenfolge ändern. Die Antwort von @ warheat1990 änderte sich jedoch etwas. Hier ist meine ursprüngliche Verbindungszeichenfolge (LocalDb):

<add name="DefaultConnection"
     connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-my_project-20150318100658.mdf;Initial Catalog=my_project-20150318100658;Integrated Security=True"
     providerName="System.Data.SqlClient"/>

Um eine Verbindung zu SQL Server anstelle von LocalDB herzustellen, habe ich die Verbindungszeichenfolge folgendermaßen geändert:

<add name="DefaultConnection"
     connectionString="Data Source=SERVERNAME\SQLEXPRESS;Initial Catalog=my_project;Integrated Security=True"
     providerName="System.Data.SqlClient"/>

Danke an @ warheat1990 für die Idee, einfach die Web.config zu ändern. Meine ersten Gedanken waren, die von VS gelieferte Funktion zu identifizieren und zu verwenden, wenn überhaupt. Microsoft verfügt nicht über eine kurze Dokumentation dazu.

19
doncadavona

Trotz dieser alten Frage hat mir die Antwort nicht geholfen, deshalb möchte ich mitteilen, wie ich sie für mich gelöst habe.

Suchen Sie im Server-Explorer nach Ihrer ASPNet-Datenbank. Dann öffnen Sie es mit dem SQL Server Object Explorer.

 enter image description here

Dann gehen Sie zur Option Schema Compare

 Compare Schemas

Wählen Sie dann im Fenster "Schemavergleich" für die Zieldatenbank die SQL Server-Datenbank aus, in die die ASPNet DB integriert werden soll. Klicken Sie dann auf die Schaltfläche Vergleichen

 Set Options

Heben Sie die Markierung aller Löschaktionen für die Zieldatenbank auf, und lassen Sie alle ausgewählten Aktionen für ASPNet DB ausgewählt, und klicken Sie auf die Schaltfläche Aktualisieren.

 Update

Aktualisieren Sie schließlich Ihre Verbindungszeichenfolge, damit sie auf Ihre SQL Server-Datenbank verweist

38
Overlord

Ändern Sie den connectionString in Ihrer web.config

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-KlikRX-20141203034323.mdf;Initial Catalog=aspnet-Test-20141203034323;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

zu Ihrer eigenen Datenbank connectionString, zum Beispiel:

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=7.7.7.7\sql;Initial Catalog=TestDB;User ID=sa;Password=sa" />
  </connectionStrings>
6
warheat1990

Es klingt wie Sie möchten die Daten von Ihrer lokalen Datenbank auf den SQL-Server verschieben. Wenn dies der Fall ist, besteht die einfachste Möglichkeit darin, die lokale Datenbank zu sichern und auf dem Server wiederherzustellen. 

So sichern Sie: https://msdn.Microsoft.com/en-us/library/ms187510.aspx#SSMSProcedure

Wiederherstellen: https://msdn.Microsoft.com/en-us/library/ms177429.aspx

BEARBEITEN:

Wenn Sie eine Instanz von SQL Server installieren müssen: https://msdn.Microsoft.com/de-de/library/ms143219.aspx

3
Brennan Pope

Ich hatte das gleiche Problem und habe dieses Problem gelöst ... Der Hauptpunkt ist die Standardverbindungszeichenfolge ... die Sie richtig ändern müssen, ansonsten ist es sinnlos. Kopieren Sie also alle Ihre Benutzer ... in die Online-Datenbank (sie sollte genauso aussehen wie in Ihrer lokalen Datenbank). Sie können das Schema (lokale Datenbank) mit der echten Datenbank vergleichen. Es wird gut erklärt durch "Overlord" -> Erklärung

After lässt jetzt die defaultconnection-Zeichenfolge .__ ändern. Das ist meine Standardzeichenfolge vor der Änderung:

 <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-track_spa-20180502025513.mdf;Initial Catalog=aspnet-track_spa-20180502025513;Integrated Security=True" providerName="System.Data.SqlClient" />

Das ist meine geänderte Standardzeichenfolge nach der Änderung:

<add name="DefaultConnection" connectionString="Data Source=servername,portnumber;Initial Catalog=AttendanceTrak;Integrated Security=False;User Id=****;Password=*****;Encrypt=True;TrustServerCertificate=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

servername - sollte Ihr Server sein Portnummer - sollte Ihr Serverport sein 

Ich habe eine Ewigkeit gebraucht, um es endlich richtig zum Laufen zu bringen ... aber dieser kleine Trick mit der Default-Saite hat es einfach geschafft! 

0

Das Migrationsbeispiel von Overlord ist genau richtig. Meine Anmerkung am Ende war ein bisschen groß für einen Kommentar, deshalb sind hier die erforderlichen Änderungen an der web.config-Datei. Eine alte Methode auf einem lokalen Laufwerk war anzugeben

Data Source=".\[InstanceName]

funktioniert jedoch möglicherweise nicht auf neueren Schnittstellen. Ersetzen Sie daher [.\instance] durch [ComputerName\instance], wenn Sie vorwärts migrieren. Dies ist Visual Studio Pro 2017, SQL Server 2014 und Entity Framework 6.0.

1. Aktualisieren Sie die Verbindungszeichenfolge. Ersetzen Sie Elemente in Klammern durch Informationen, die zum Herstellen einer Verbindung mit Ihrer Datenbank erforderlich sind.

<connectionStrings>
   <add name="DefaultConnection" 
    connectionString="Initial Catalog=[DatabaseName];Integrated Security=True;User ID=[SQLASPNETUserName];Password=[UserPassword];"
    providerName="System.Data.SqlClient" />
</connectionStrings>

als nächstes aktualisieren Sie die Entitätsinformationen. Der für SQL Server verwendete [InstanceName] befindet sich in der [SQL Server Mgmt] -Konsole - [Servereigenschaften] - [Erweitert] - [Filestream-Freigabename] und ist standardmäßig [MSSQLSERVER].

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
     <parameters>
        <parameter value="[ServerName]\[InstanceName]"/>
     </parameters>
  </defaultConnectionFactory> 
  <providers>
     <provider invariantName="System.Data.SqlClient" 
      type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
  </providers>
</entityFramework>

überprüfen Sie für Cloud- oder andere Datenbankmigrationen mit mehreren Servern auch die Einstellungen für [sessionState] in web.config und ersetzen Sie [InProc] durch [Custom]. [sessionState] kommt zwischen [/ roleManager] & [/system.web]

diese Standardeinstellung gilt für 1-DB-Server

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider"
      type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      connectionStringName="DefaultConnection"/>
  </providers>
</sessionState>

& Dieser Ersatz für Multiserver- oder Cloud-Umgebungen

<sessionState mode="Custom" customProvider="DefaultSessionProvider">
0
Joseph Poirier

Dies funktioniert bei mir. Ändern Sie die Verbindungszeichenfolge in der Webkonfigurationsdatei, die auf den Datenbankserver verweist, führen Sie die Anwendung aus und registrieren Sie einen Benutzer. Wenn Sie sich erfolgreich registriert haben, rufen Sie SSMS auf, und aktualisieren Sie die Datenbank. Anschließend sollten die Identitätstabellen angezeigt werden.

Grüße

0
Edward Hecucent

In Bezug auf die Antwort von OverLords funktionierte es perfekt für mich, danke!

Wenn jemand mit der Verbindungszeichenfolge zu kämpfen hat, verwenden Sie Folgendes: 

    <add name="CONNECTIONSTRINGNAME" connectionString='data source= DATABASE SOURCE initial catalog=&quot;DATABASE NAME &quot;;user id=&quot;USERID&quot;;password=PASSWORD;MultipleActiveResultSets=True;' providerName="System.Data.SqlClient" />
0
JackB

Ich hatte ein ähnliches Problem, als ich von einer lokalen Datenbank auf einen Remote-Datenbankserver exportieren wollte. Ich habe eine Fehlermeldung gefunden, über die ich keine Informationen finden konnte. Die Antwort kam jedoch, als ich diesen Beitrag las. Ich übermittle meine Antwort hier, falls jemand anderes das gleiche Problem hat.

Ich habe eine Lösung mit individuellen Benutzerkonten eingerichtet. VS erstellt bequem eine DB (MDF-Datei unter App_Data) und einen Verbindungsstring in der web.config.

In all meiner Weisheit dachte ich: "Warum nicht auf einen Remote-Server verschieben?" So tat ich. 

Ich stellte die MDF-Datei auf dem Remote-Server wieder her, erweiterte sie mit ein paar einfachen Tabellen für meine Website, stellte eine neue Verbindung zur DB her und fügte eine neue ado.net-edmx-Datei hinzu, entfernte die "DefaultConnection" in der web.config und Der Verweis auf meine neue Verbindung wurde im ApplicationDBContext aktualisiert.

Drücken Sie auf play und ... no sigar (wenn Sie versuchen, sich einzuloggen).

The entity type IdentityUserLogin is not part of the model for the current context.

Es stellt sich heraus, dass IdentityDbContex die "DefaultConnection" mit dem providerName = "System.Data.SqlClient" bevorzugt, so dass das Hinzufügen einer neuen edmx-Datei mit dem providerName = "System.Data.EntityClient" nicht sinnvoll ist. 

Lösung: Wie von warheat1990 vorgeschlagen, habe ich die DefaultConnections und ihren Connectionstring-Wert aktualisiert (zurückgesetzt).

Man könnte argumentieren, dass ich zwei getrennte Db (eine für Benutzer) und eine für geschäftliche Angelegenheiten haben sollte, aber das ist eine andere Diskussion.

0
hormberg