2012-04-07 15 views
9

, ben her zaman belleğe tüm ikili okumak gerekir , akışı doğrudan koymak için? Çünkü büyük bir dosya yüklemek istiyorum, bir OutOfMemoryException alıyorum.SQL FileStream + Varlık Çerçeve mağaza büyük dosyalar

+0

bu benzer yöntem kullanılarak çözülebilir Could http://stackoverflow.com/ Sadece SQL Server tarafından kullanılan sorular/4441179/outofmemoryexception-ne zaman-sql-filestream kullanıyor? Eski tip bağlantı ile karıştırılmış EntityFramework kullanıyor gibi görünüyor. – MadBoy

+0

evet, başka bir yol yoksa, bunu kullanacağım. Teşekkürler –

cevap

2

EF'de FILESTREAM desteği hakkında herhangi bir güncelleme görmedi. (. Net 3.5 sp1 sürümühere ile kısmi destek olarak daha önce bahsedilmiştir). Varlık çerçevesinin TSQL aracılığıyla FILESTREAM'e eriştiğini ve FILESTREAM'in akış performansı avantajlarını elde edemeyeceğinizi düşünüyorum. (tüm dosya içeriğini belleğe okuması gerekiyor)

Önerilen yaklaşım SqlFileStream .Net API ile kullanılıyor. Bunu yapabilecek

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

7

EF, FIlESTREAM için herhangi bir destekte bulunmamaktadır. Bu, FILESTREAM ile tüm etkileşimleri normal VARBINARY(MAX) sütununda ele alır, böylece akışı kullanmak istiyorsanız doğrudan ADO.NET kullanmalısınız.

+6

2 yaşındaki bir cevabı çağırmak ... Bunun bugün hala geçerli olup olmadığını biliyor musunuz? – Vache

+0

Aynı soruya da sahip. Bu hala geçerli mi? – jpgrassi

+0

@jpgrassi: Gerçek dosya akışının nasıl çalıştığıyla ilgili bir değişiklik olduğunu düşünmüyorum fakat EF'yi bir süredir kullanmadım, bu yüzden yanılıyor olabilirim. –

0

ancak bazı manuel çalışma gerektirir. Etkin olması için FILESTREAM gerektirir.

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

Tablo gereklidir unique rowguidcol not null IdFile sütunu fark.

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 

EF modeli, IdFile sütunu mevcut değil, yalnızca varsayılan değerler içerir ve bizim için hiçbir yararı yoktur.

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

VM:

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

Kaynak:

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