2016-04-04 16 views
5

Ich habe einen Schauspieler, der erstellt wurde 6.Mit LocalDB mit Service Fabric

using (var context = new MetadataContext()) 
{ 
    var userStorageAccountId = context.Set<UsersToStorageAccounts>() 
             .Find(userId).StorageAccountId; 
} 

Die DB Entity Framework eine Anfrage von einem WebAPI Projekt, der Schauspieler, der eine Tabelle abfragt beim Empfang mit successfuly der „Add-Migration mit "..‚Update-Datenbank‘Befehle und hat die folgende Verbindungszeichenfolge:

@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFileName=C:\Users\xxxx\Metadata.mdf;Connect Timeout=30;Initial Catalog=Metadata;Integrated Security=True;" 

Wenn ich den Stoff Dienst ausgeführt und der Schauspieler versucht, den Kontext zugreifen zu können, ich die folgende Ausnahme erhalten:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.)

und die Ereignisanzeige Fehler ist:

Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user.

ich für eine Art und Weise sah das Profil des Benutzers zu laden, aber ich fand nur Lösungen für IIS.

Bitte helfen :)

+1

Der ganze Sinn der Verwendung von Service Fabric ist eine einfache Bereitstellung, ohne sich um den Server kümmern zu müssen. LocalDB (eine In-Process-Datenbank, die Daten lokal speichert) bedeutet, dass Sie den Server wirklich modifizieren * wollen * und sich daran binden wollen, da Sie nicht auf einen anderen Rechner wechseln können, ohne Ihre Daten zu verlieren. Darüber hinaus verwendet Ihr Code einen Datenbankpfad, der auf einen bestimmten Benutzerordner verweist. –

+4

@PanagiotisKanavos Die LocalDB wird nur zum Debuggen verwendet. Wenn das Service Fabric in einer Entwicklungsumgebung ausgeführt wird, wird LocalDB verwendet. Wenn es in prod ausgeführt wird, wird eine mssql-Serverdatenbank verwendet. Ich kann es nicht lokal zum Debugging arbeiten. – shlatchz

+1

Verwenden Sie es nicht dann. Service Fabric * wird unter Ihrem Konto nicht einmal lokal ausgeführt, sodass es nicht auf Ihr Benutzerverzeichnis zugreifen kann. Der Fehler weist darauf hin, dass Service Fabric unter einem Konto ausgeführt wird, das das Laden von Profilen nicht zulässt, dh kein Profil hat, dh kein Benutzerverzeichnis. Warum überhaupt LocalDB anstelle einer lokalen Installation von SQL Server verwenden?Dev-Edition ist kostenlos –

Antwort

12

Als Service Stoff läuft unter einem anderen Benutzer, müssen Sie die Datenbank teilen und gibt den NETWORK SERVICE Berechtigungen:

  1. Mit die SqlLocalDB.exe Befehlszeile share Ihre Verbindung mit diesen Befehl ausgeben:

    sqllocaldb share MSSqlLocalDB SharedDB 
    
  2. Öffnen Sie die LocalDB mit SQL Server Management Studio und auf die /Security/Logins gehen, fügen Sie den NETWORK SERVICE lokales Konto und in Benutzerzuordnung fügen Sie es als DBO (dbo.dbowner) zu Ihrer Datenbank

  3. Verwenden Sie den Freigabenamen in Ihrer Verbindungszeichenfolge wie folgt aus:

    "Data Source=(localdb)\.\SharedDB;Initial Catalog=[YOUR DB];Integrated Security=SSPI;" 
    

bearbeiten Hier haben Sie ein Skript, das ich zu meinen Projekten hinzugefügt haben, database mit dem Namen Ihres db ändern:

sqllocaldb create MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 
sqllocaldb share mssqllocaldb sharedlocal 
sqllocaldb stop MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 

"c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S "(localdb)\.\sharedlocal" -d "databasename" -Q"create login [nt authority\network service] FROM windows with DEFAULT_DATABASE=databasename;use databasename;exec sp_addrolemember 'db_owner', 'nt authority\network service';" 
+0

Es funktioniert für mich. außer meiner Verbindungszeichenfolge ist 'Datenquelle = (LocalDb) \. \ SharedDB; Anfangskatalog = [IHR DB]; Integrierte Sicherheit = Wahr '. Vielen Dank! – tsu1980

+0

Ich musste auch die localdb-Instanz stoppen/starten, damit die Freigabe wirksam wird. – JohnnyFun

-2

in Service Stoff Bezug auf IIS, ich dachte, Sie keinen Service Stoff ASP.NET-Anwendung in IIS hosten kann. Deshalb, wenn Sie staatenlos ASP.NET SF-Projekt erstellen, das Standard-Hosting Owin ist

+1

Der Fehler, den ich erhalten habe, ist mir nicht bewusst, dass ich versuche, LocalDB mit Service Fabric zu starten, daher bedeutet sein Vorschlag nicht, dass SF mit IIS arbeitet. – shlatchz

+0

Die Frage impliziert nicht, dass sie IIS verwenden oder verwenden möchten. Das Problem besteht darin, dass bei der Ausführung des Service Fabric-Clusters auf dem Entwicklungscomputer Probleme bei der Verbindung mit einer Datenbank auftreten, die auf demselben Computer gehostet wird. –

Verwandte Themen