2011-01-11 13 views

cevap

37

SQL'de SQL FILESTREAM'u kullanamazsınız. EF'in farklı veritabanı sunucularının üstünde çalışması gerekiyor ancak filestream özelliği SQL 2008 ve daha yeni özelliklerin bir özelliğidir. Bunu eski şekilde yapmaya çalışabilirsiniz - veritabanı tablonuzda varbinary(max) kullanın ve eşlenmiş sınıfınızda bayt dizisini kullanın.

Düzenleme:

Küçük açıklama - Eğer veritabanında FILESTREAM kullanabilirsiniz ancak EF akışı yararlanmak olmayacaktır. Standart varbinary(max) olarak yükleyecektir.

52

Sadece mülkünüzü Ladislav'nın bahsettiği gibi [] olarak ilan edin.

public class Product 
{ 
    public int Id { get; private set; } 

    public string Name { get; set; } 

    public byte[] ProductImage { get; set; } 
} 

Bu oldukça fazla. Eğer mülkü haritalamazsanız, bu kural varbinary(max) ile eşleşiyor. Eğer veritabanında bir görüntü sütun varsa zaten sadece ProductImage mülkiyet [Column(TypeName = "image")] eklemek veya kod eşlemesi tercih ederseniz bağlam sınıfta OnModelCreating geçersiz kılma için bu ekleyin:

modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image"); 

Ben onunla var sorun olduğunu Bir ürünü getirdiğimde her zaman ikili veriyi yüklemek istemediğimden, özelliği tembelleştirmenin bir yolunu bulamadım. Doğru hatırladığımdan emin değilim, ancak NHibernate bunu kutudan çıkarabilir.

Hep tabloyu normalleştirmek için de tembel yükleme yönetmek ve amacıyla bire-bir ilişki ile ProductImage gibi başka sınıf oluşturmak
+0

Evet, NHibernate sütun özgü tembel-yükleme yapabilirsiniz kutunun dışında: http://ayende.com/blog/4377/nhibernate-new-feature-lazy-properties. – gabe

95

:

public class ProductImage 
{ 
    public int ProductId { get; private set; } 
    public byte[] Image { get; set; } 
} 
+9

Bu tekniği kullanarak büyük bir performans artışı gördüm. – jsturtevant

+2

Dosya görüntüsü sütununu içermeyen bir görünüm oluşturmak ve ardından EF'de tablo yerine görünüme işaret eden ikinci bir varlık oluşturmak çok kolay olmaz mıydı? "ProductLite" –

+0

@ C.List Yıllardır EF kullandığımı ve bunu yapmayı hiç düşünmediğime inanamıyorum. Bu harika bir fikir ve ben sadece bunu kullanmak için kullandım, aynı şeyi yapmak için kullandığım gereksiz bir manzaradan kurtulmak. Buna bir "sanal varlık" diyelim :) –

İlgili konular