2016-04-22 37 views
5

Sono in procinto di aggiornare un'applicazione esistente a .NET Core (DNX SDK 1.0.0-rc1-update2) che utilizza la funzionalità FILESTREAM di SQL Server per la lettura/scrittura di BLOB di grandi dimensioni il database. Utilizza la classe SqlFileStream per ottenere ciò, tuttavia non sembra essere disponibile in .NET Core. Qui sono i miei riferimenti in project.json:Supporto .NET core per 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" 
     } 
    } 
} 

Ho provato a cercare SO e Google, entrambi i quali hanno assolutamente nulla sull'argomento.

Qualcuno può confermare se è effettivamente non disponibile o se si trova in un altro pacchetto di cui non sono a conoscenza?

+0

Hai provato a cercare su nuget? Un sacco di funzionalità nel .net core sembra provenire da nuget. – Simon

+0

Sì, ho provato un paio di pacchetti diversi, ma nessuno di loro ha sfortunatamente sfornato – lawst

+0

Anche io lo sto cercando, ma credo che sia ancora poco sviluppato. – Marcin

risposta

2

Mi rendo conto che la domanda è vecchia, ma ho appena trovato il problema - l'implementazione di SqlFileStream - elencata nel repository github per CoreFX (le librerie fondamentali di .NET Core) e ho pensato di parlarne qui. Ecco un collegamento al problema, per riferimento: https://github.com/dotnet/corefx/issues/15652

Per ricapitolare: Il problema è che implementa SqlFileStream. Attualmente è un problema aperto, ma non all'orizzonte in qualsiasi momento presto. Uno dei contributori afferma "se ci sono dipendenze specifiche di Windows, non possiamo portarlo in Core".

1

Sono stato interessato a questo per un po 'e ho avuto un po' di tempo negli ultimi giorni.

Sfortunatamente, FILESTREAM utilizza diverse chiamate di sistema specifiche NTFS e NT (NtCreateFile, DeviceIoControl in particolare, ma alcune altre per supportare anche quelle) per gestire l'accesso al file. Inoltre, sfortunatamente, al momento della stesura di questo documento, gli ultimi CTP MSSQL per Linux non supportano FILESTREAM, e c'è poca chiarezza sul fatto che sia sulla roadmap o dove potrebbe essere (stranamente, è possibile ripristinare un database che supporti FILESTREAM ma FileTable non lo fa sembra essere supportato).

Ci sono due problemi qui: non è chiaro che la sostituzione delle API specifiche di NT rispetterebbe l'integrità della transazione (o addirittura non funzionerebbe affatto), e non è chiaro che potrebbero comunque mai lavorare da un ambiente non Windows. A causa di questi fatti, non vedo che lo standard SqlFileStream sia supportato in qualsiasi momento nel prossimo futuro.

Ci è qualche precedente per Windows unico tipo di basso livello, ad esempio in System.Net.Socket.IOControl. SqlFileStream potrebbe forse intraprendere un percorso simile. In alternativa, potrebbe essere possibile creare uno specifico pacchetto NuGet SqlFileStream, ma farlo funzionare solo su Windows. Non sono sicuro di quanto sarebbe prezioso questo se - se stai andando a P/Invoke in un modo solo per cominciare con Windows, perché non solo P/Invoke su una DLL 4.6.x .NET?

Croce questo distacco alla questione GitHub: https://github.com/dotnet/corefx/issues/15652

Edit: In alternativa al P/Invoke, si potrebbe certamente creare qualche altro tipo di servizio (RESTful, WCF, qualche altro tubo o TCP o addirittura file mappato in memoria) in .NET 4.x per accedere a una libreria o applicazione .NET Core.