2016-04-22 16 views
5

Ich bin dabei, eine vorhandene Anwendung auf .NET Core (DNX SDK 1.0.0-rc1-update2) zu aktualisieren, die SQL Server FILESTREAM-Funktion zum Lesen/Schreiben von großen BLOBs verwendet die Datenbank. Es verwendet die SqlFileStream-Klasse, um dies zu erreichen, es scheint jedoch in .NET Core nicht verfügbar zu sein. Hier sind meine Referenzen in project.json:.NET Core-Unterstützung für SQL Server FILESTREAM

"frameworks": { 
    "net451": { 
     "frameworkAssemblies": { 
     "System.Runtime": "4.0.10.0", 
     "System.Collections": "4.0.0.0" 
     } 
    }, 
    "dotnet5.4": { 
     "dependencies": { 
     "Microsoft.CSharp": "4.0.1-beta-23516", 
     "System.Data.Common": "4.0.1-beta-23516", 
     "System.Data.SqlClient": "4.0.0-rc2-23623", 
     "System.Collections": "4.0.11-beta-23516", 
     "System.IO.FileSystem": "4.0.1-beta-23516", 
     "System.Linq": "4.0.1-beta-23516", 
     "System.Runtime": "4.0.21-beta-23516", 
     "System.Threading": "4.0.11-beta-23516" 
     } 
    } 
} 

Ich habe versucht, die Suche SO und Google, von denen beide haben absolut nichts zu dem Thema.

Kann jemand bitte bestätigen, wenn es tatsächlich nicht verfügbar ist oder wenn es in einem anderen Paket ist mir nicht bewusst?

+0

Haben Sie versucht, auf niget zu schauen? Eine Menge Funktionalität in .net-Core scheint von nuget zu kommen. – Simon

+0

Ja, ich habe ein paar verschiedene Pakete ausprobiert, aber keines von ihnen hat es leider geschafft – lawst

+0

Ich bin auch auf der Suche nach diesem, aber es ist immer noch nicht bestätigt, glaube ich. – Marcin

Antwort

2

Ich weiß, dass die Frage alt ist, aber ich bin gerade auf das Problem gekommen - Implementierung von SqlFileStream - aufgeführt auf dem Github Repo für CoreFX (.NET Core-Basisbibliotheken) und dachte, ich würde es hier erwähnen. Hier ist ein Link auf die Frage, als Referenz: https://github.com/dotnet/corefx/issues/15652

Zur Erinnerung: Die Frage Umsetzung SqlFileStream ist. Es ist derzeit ein offenes Thema, aber nicht bald auf dem Horizont. Einer der Mitwirkenden besagt, "wenn es Windows-spezifische Abhängigkeiten gibt, können wir es möglicherweise nicht in Core bringen."

1

Ich war schon eine Weile daran interessiert und habe mir in den letzten Tagen etwas Zeit genommen.

Leider verwendet FILESTREAM mehrere NTFS und bestimmte Systemaufrufe NT (NtCreateFile, DeviceIoControl insbesondere, aber ein paar andere, diese ebenfalls zu unterstützen) Zugriff auf die Datei zu verwalten. Außerdem unterstützen die neuesten MSSQL-CTPs für Linux FILESTREAM leider nicht, und es gibt wenig Klarheit darüber, ob das auf der Roadmap ist oder wo es sein könnte (seltsamerweise können Sie eine Datenbank wiederherstellen, die FILESTREAM unterstützt, aber FileTable funktioniert nicht scheint nicht unterstützt zu werden.

Hier gibt es zwei Probleme: Es ist nicht klar, dass das Ersetzen der NT-spezifischen APIs die Transaktionsintegrität respektieren würde (oder überhaupt funktionieren würde), und es ist nicht klar, dass sie überhaupt aus einer Nicht-Windows-Umgebung funktionieren könnten. Wegen dieser Tatsachen sehe ich nicht, dass SqlFileStream in naher Zukunft für Kern unterstützt wird.

Dort ist einige Präzedenzfälle für Windows Nur Typ der niedrigen Ebene, zum Beispiel in System.Net.Socket.IOControl. SqlFileStream könnte vielleicht einen ähnlichen Weg gehen. Alternativ könnte es möglich sein, ein spezifisches SqlFileStream NuGet-Paket zu erstellen, aber nur unter Windows unterstützt/ausgeführt werden. Ich bin mir nicht sicher, wie wertvoll dies wäre - wenn Sie P/Invoke nur auf Windows-Weise starten, warum nicht einfach P/Invoice auf eine .NET 4.6.x-DLL?

Kreuz dieses Posting auf die GitHub Ausgabe: https://github.com/dotnet/corefx/issues/15652

bearbeiten: Als Alternative zu P/Invoke, man könnte sicherlich eine andere Art von Dienst erstellen (RESTful, WCF, einige andere Rohr oder TCP oder sogar Speicherabbilddatei) in .NET 4.x für den Zugriff auf eine .NET Core-Bibliothek oder -Anwendung.