.NET Core支持SQL Server FILESTREAM

时间:2016-04-22 11:19:55

标签: sql-server asp.net-core dnx sqlfilestream asp.net5

我正在将现有应用程序升级到.NET Core(DNX SDK 1.0.0-rc1-update2),该程序使用SQL Server FILESTREAM功能将大型BLOB读取/写入数据库。它使用SqlFileStream类来实现这一点,但它似乎在.NET Core中不可用。这是我在project.json中的引用:

"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"
      }
    }
}

我尝试过搜索SO和Google,这两者都没有关于此主题的内容。

有人可以确认它是否真的不可用,或者是否在另一个我不知道的包中?

2 个答案:

答案 0 :(得分:3)

我意识到这个问题已经过时了,但我刚刚遇到了这个问题 - 实现了SqlFileStream - 在CoreFX(.NET Core基础库)的github repo上列出,我想在此提及它。以下是该问题的链接,供参考:https://github.com/dotnet/corefx/issues/15652

回顾一下:问题是实现SqlFileStream 。它目前是一个悬而未决的问题,但不会很快就会出现。其中一个贡献者声明"如果存在任何Windows特定的依赖关系,我们可能不会将其带入Core。"

答案 1 :(得分:1)

我实际上对此感兴趣了一段时间,过去几天花了一些时间。

不幸的是,FILESTREAM使用了几个NTFS和NT特定的系统调用(特别是NtCreateFileDeviceIoControl,还有一些其他系统调用来管理对文件的访问。此外,遗憾的是,在撰写本文时,最新的Linux版MSSQL CTP不支持FILESTREAM,并且关于路线图上的内容或它可能位于何处都很清晰(奇怪的是,你可以恢复支持FILESTREAM的数据库,但似乎不支持FileTable。

这里存在两个问题:不清楚替换特定于NT的API会尊重事务完整性(甚至根本不工作),并且不清楚它们是否可以从非 - 无论如何都是窗户环境。由于这些事实,我不会在不久的将来看到SqlFileStream被支持为核心。

一些先例,仅适用于低级别的Windows,例如System.Net.Socket.IOControlSqlFileStream也许可以采取类似的方式。或者,也许可以构建一个特定的SqlFileStream NuGet包,但只能在Windows上支持/运行它。我不确定这会有多大价值 - 如果你以Windows开始的方式进入P / Invoke,为什么不只是P / Invoke到.NET 4.6.x dll? / p>

将此问题交叉发布到github问题:https://github.com/dotnet/corefx/issues/15652

编辑:作为P / Invoke的替代方案,您当然可以在.NET 4中创建其他类型的服务(RESTful,WCF,其他一些管道或TCP甚至内存映射文件)。 x表示要访问的.NET Core库或应用程序。