7

我正在将现有应用程序升级到 .NET Core (DNX SDK 1.0.0-rc1-update2),它使用 SQL Servers 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,两者都没有关于这个主题的内容。

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

4

2 回答 2

3

我意识到这个问题很老,但我刚刚遇到了这个问题 - 实现 SqlFileStream - 在 CoreFX(.NET Core 基础库)的 github repo 上列出,并认为我会在这里提到它。这是问题的链接,供参考: https ://github.com/dotnet/corefx/issues/15652

回顾一下:问题是实现 SqlFileStream。它目前是一个悬而未决的问题,但不会很快出现。其中一位贡献者表示“如果有任何 Windows 特定的依赖项,我们可能不会将其引入 Core。”

于 2017-05-04T17:52:18.393 回答
1

实际上,我对此感兴趣已有一段时间了,并且在过去几天中花了一些时间。

不幸的是,FILESTREAM 使用了几个 NTFS 和 NT 特定的系统调用(NtCreateFile特别DeviceIoControl是 ,但还有一些其他的系统调用也支持这些调用)来管理对文件的访问。此外,不幸的是,在撰写本文时,Linux 的最新 MSSQL CTP 不支持 FILESTREAM,而且对于这是否在路线图上或它可能在哪里还不清楚(奇怪的是,您可以恢复支持 FILESTREAM 但 FileTable 不支持的数据库'似乎不受支持)。

这里有两个问题:不清楚替换 NT 特定的 API 是否会尊重事务完整性(甚至完全可以工作),也不清楚它们是否可以在非 Windows 环境中工作。由于这些事实,我认为SqlFileStream在不久的将来不会支持核心。

Windows Only 类型的低级别有一些先例,例如在System.Net.Socket.IOControl. SqlFileStream也许可以走类似的道路。或者,可以构建特定的SqlFileStreamNuGet 包,但只能在 Windows 上支持/运行。不过,我不确定这会有多有价值——如果您要以 Windows 唯一的方式开始 P/Invoke,为什么不直接 P/Invoke 到 .NET 4.6.x dll 呢?

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

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

于 2017-05-23T15:36:01.533 回答