, 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
cevap
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
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.
2 yaşındaki bir cevabı çağırmak ... Bunun bugün hala geçerli olup olmadığını biliyor musunuz? – Vache
Aynı soruya da sahip. Bu hala geçerli mi? – jpgrassi
@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. –
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
- 1. Ham SQL sorguları ve Varlık Çerçeve Çekirdeği
- 2. C# varlık çerçeve
- 3. Varlık çerçeve EF.Functions.Like string.Contains
- 4. Varlık Çerçeve Doğrulaması
- 5. Varlık Çerçeve, başvuru kısıtlaması
- 6. Varlık Çerçeve Kodu İlk
- 7. Varlık-Çerçeve otomatik güncelleştirmesi
- 8. Varlık çerçeve 7
- 9. Varlık Çerçeve Geçiş API'sı
- 10. Varlık Çerçeve ObjectQuery.Include()
- 11. FileStream
- 12. Varlık Çerçeve 7 ve giriş
- 13. Varlık Çerçeve Modeli kullanılarak Uzaktan
- 14. Varsayılan Varlık Çerçeve zaman aşımı
- 15. Varlık-çerçeve-7 ayrı sınıfa
- 16. java: büyük dosyalar mı yazıyor?
- 17. Upload Büyük dosyalar (1GB) -ASP.net
- 18. Büyük dosyalar için yapılandırma ayarları
- 19. SQL Azure, FILESTREAM veri tipini destekliyor mu?
- 20. Varlık Çerçeve Kodu ile Npgsql entegrasyonu İlk
- 21. Filestream veritabanı nasıl yedeklenir?
- 22. Varlık Çerçeve Kodu İlk - Tablo Değiştir Sütun Harmanlama
- 23. FILESTREAM/FILETABLE Uygulama için Açıklamalar
- 24. Varlık Çerçeve sorgusunda birden çok Katılma
- 25. C# FileStream: Büyük dosyaları yazmak için en uygun arabellek boyutu?
- 26. - İhtiyacım Ne filestream tampon
- 27. Varlık çerçeve geçişi ve belirli güncelleştirmenin eklenmesi
- 28. Varlık çerçeve kodu ilk boş anahtar
- 29. Varlık Çerçeve Kodunda Tablo Öneki Nasıl Eklenir?
- 30. Varlık Çerçeve Kodu İlk MySql Çoğullama Tabloları
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
evet, başka bir yol yoksa, bunu kullanacağım. Teşekkürler –