2012-04-07 12 views
9

जब मैं एक filestream स्तंभ में एक फ़ाइल संग्रहीत करना चाहते हैं, मैं हमेशा स्मृति में पूरे द्विआधारी पढ़ने की जरूरत है:एसक्यूएल FileStream + इकाई की रूपरेखा दुकान बड़ी फ़ाइलों

using (MemoryStream memoryStream = new MemoryStream()) 
{ 
    sourceStream.CopyTo(memoryStream); 
    binaryStore.Content = memoryStream.ToArray(); //Content = filestream column 
} 

वहाँ इकाई ढांचे के साथ एक रास्ता है स्ट्रीम को सीधे रखने के लिए? क्योंकि, अगर मैं एक बड़ी फाइल अपलोड करना चाहता हूं, तो मुझे आउटऑफमेमरी अपवाद प्राप्त होता है।

+0

इस समान पद्धति का उपयोग करके हल किया जा सकता है http://stackoverflow.com/ यह केवल एसक्यूएल सर्वर द्वारा किया जाता है प्रश्न/4441179/outofmemoryexception-कब-उपयोग-एसक्यूएल-फाइलस्ट्रीम? ऐसा लगता है कि पुराने प्रकार के कनेक्शन के साथ मिश्रित EntityFramework का उपयोग किया जा रहा है। – MadBoy

+0

हां, यदि कोई दूसरा तरीका नहीं है, तो मैं इसका उपयोग करूंगा। धन्यवाद –

उत्तर

2

ईएफ में FILESTREAM समर्थन के बारे में कोई भी अपडेट नहीं देखा। (.net 3.5 sp1 रिलीजhere के साथ आंशिक समर्थन के रूप में पहले उल्लेख किया गया)। मुझे लगता है कि इकाई ढांचा TSQL के माध्यम से FILESTREAM तक पहुंच रहा है और यह स्पष्ट है कि आप FILESTREAM के स्ट्रीमिंग प्रदर्शन लाभ प्राप्त नहीं कर पाएंगे। (मेमोरी में सभी फ़ाइल सामग्री को पढ़ने की आवश्यकता है)

तो, अनुशंसित दृष्टिकोण SqlFileStream .NET API के साथ उपयोग कर रहा है।

http://lennilobel.wordpress.com/2011/08/22/using-sqlfilestream-in-c-to-access-sql-server-filestream-data/

7

ईएफ के पास FIlESTREAM के लिए कोई समर्थन नहीं है। यह सामान्य VARBINARY(MAX) कॉलम के रूप में FILESTREAM के साथ सभी इंटरैक्शन को संभालता है ताकि यदि आप स्ट्रीमिंग का उपयोग करना चाहते हैं तो आपको सीधे ADO.NET का उपयोग करना होगा।

+6

2 साल पुराना जवाब पोकिंग ... क्या आपको पता है कि आज भी यह सच है या नहीं? – Vache

+0

भी वही प्रश्न है। क्या यह अभी भी सच है? – jpgrassi

+0

@jpgrassi: मुझे नहीं लगता कि वास्तविक फ़ाइल स्ट्रीम कैसे काम करती है, इसके कारण कोई बदलाव आया है लेकिन मैंने कुछ समय तक ईएफ का उपयोग नहीं किया है, इसलिए मैं गलत हो सकता हूं। –

0

तुम कर सकते हो, लेकिन यह कुछ शारीरिक श्रम की आवश्यकता है। सक्षम होने के लिए FILESTREAM की आवश्यकता है।

https://docs.microsoft.com/en-us/sql/relational-databases/blob/enable-and-configure-filestream

टेबल, unique rowguidcol not null IdFile स्तंभ की आवश्यकता है नोटिस।

CREATE TABLE [dbo].[Files](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [IdFile] [uniqueidentifier] unique ROWGUIDCOL NOT NULL, 
    [Title] [nvarchar](max) NULL, 
    [File] [varbinary](max) FILESTREAM NULL, 
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)) 

GO 

ALTER TABLE [dbo].[Files] ADD CONSTRAINT [DF_Files_IdFile] DEFAULT (newid()) FOR [IdFile] 
GO 

ईएफ मॉडल, आईडीफ़ाइल कॉलम मौजूद नहीं है, इसमें केवल डिफ़ॉल्ट मान हैं और हमारे लिए इसका कोई उपयोग नहीं है।

[Table("Files")] 
public class FileModel 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public byte[] File { get; set; } 
} 

वीएम:

public class FileViewModel 
{ 
    public string Title { get; set; } 
    public HttpPostedFileBase File { get; set; } 
} 

स्रोत:

http://www.floatincode.net/post/sql-file-stream-in-asp.net-mvc-with-entity-framework

संबंधित मुद्दे