2016-04-22 29 views
5

Tôi đang trong quá trình nâng cấp ứng dụng hiện có lên .NET Core (DNX SDK 1.0.0-rc1-update2) sử dụng tính năng SQL Server FILESTREAM để đọc/ghi các BLOB lớn kho dữ liệu. Nó sử dụng lớp SqlFileStream để đạt được điều này tuy nhiên nó dường như không có sẵn trong .NET Core. Dưới đây là các tham chiếu của tôi trong project.json:Hỗ trợ .NET Core cho 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" 
     } 
    } 
} 

Tôi đã thử tìm kiếm SO và Google, cả hai đều hoàn toàn không có gì về chủ đề này.

Ai đó có thể vui lòng xác nhận nếu nó thực sự không khả dụng hoặc nếu nó trong gói khác tôi không biết?

+0

Bạn đã thử tìm kiếm trên nuget? Rất nhiều chức năng trong lõi .net dường như đến từ nuget. – Simon

+0

Có Tôi đã thử một vài gói khác nhau nhưng không ai trong số họ đã panned ra tiếc là – lawst

+0

Tôi cũng đang tìm kiếm này, nhưng nó vẫn còn unsuppoerted tôi tin. – Marcin

Trả lời

2

Tôi nhận ra câu hỏi là cũ, nhưng tôi chỉ gặp vấn đề - triển khai SqlFileStream - được liệt kê trên repo github cho CoreFX (thư viện cơ sở .NET Core) và nghĩ rằng tôi muốn đề cập đến nó ở đây. Đây là liên kết đến vấn đề này, để tham khảo: https://github.com/dotnet/corefx/issues/15652

Tóm tắt lại: Vấn đề là triển khai SqlFileStream. Nó hiện là một vấn đề mở, nhưng không phải trên đường chân trời bất cứ lúc nào sớm. Một trong những người đóng góp nói rằng "nếu có bất kỳ phụ thuộc cụ thể nào của Windows, chúng tôi có thể không đưa nó vào trong Core."

1

Tôi thực sự quan tâm đến điều này một thời gian và đã dành chút thời gian trong vài ngày qua.

Thật không may, FILESTREAM sử dụng một số cuộc gọi hệ thống cụ thể NTFS và NT (NtCreateFile, DeviceIoControl cụ thể, nhưng một số khác để hỗ trợ những người đó) để quản lý quyền truy cập vào tệp. Ngoài ra, thật không may, vì việc viết CTPs MSSQL mới nhất cho Linux không hỗ trợ FILESTREAM, và có một chút rõ ràng về việc liệu đó có phải là lộ trình hay không (kỳ lạ, bạn có thể khôi phục cơ sở dữ liệu hỗ trợ FILESTREAM nhưng FileTable không dường như không được hỗ trợ). Có hai vấn đề ở đây: không rõ ràng việc thay thế các API cụ thể của NT sẽ tôn trọng tính toàn vẹn giao dịch (hoặc thậm chí là làm việc) và không rõ ràng rằng chúng có thể làm việc từ môi trường không phải Windows hay không. Bởi vì những sự kiện này, tôi không thấy SqlFileStream được hỗ trợ bất kỳ lúc nào trong tương lai gần cho lõi.

một số tiền lệ cho Windows Loại chỉ ở mức thấp, ví dụ: System.Net.Socket.IOControl. SqlFileStream có thể có một con đường tương tự. Ngoài ra, có thể xây dựng một gói NuGet SqlFileStream cụ thể, nhưng nó chỉ được hỗ trợ/chạy trên Windows. Tôi không chắc chắn như thế nào có giá trị này sẽ được mặc dù - nếu bạn đang đi P/Gọi trong một cách duy nhất Windows để bắt đầu với, tại sao không chỉ P/Gọi đến một dll .NET 4.6.x?

chéo gửi bài này đến vấn đề github: https://github.com/dotnet/corefx/issues/15652

Sửa: Để thay thế cho P/Invoke, bạn chắc chắn có thể tạo ra một số loại khác của dịch vụ (RESTful, WCF, một số ống hoặc TCP khác hoặc thậm chí tệp ánh xạ bộ nhớ) trong .NET 4.x cho thư viện .NET Core hoặc ứng dụng để truy cập.

Các vấn đề liên quan