2011-01-11 102 views

回答

37

您不能在EF中使用SQL FILESTREAM。 EF應該在不同的數據庫服務器上工作,但文件流功能是SQL 2008和更新的特定功能。你可以嘗試以舊的方式 - 在你的數據庫表中使用varbinary(max),並在映射類中使用字節數組。

編輯:

澄清一下 - 你可以使用數據庫FILESTREAM但EF不會採取流的優勢。它會將其作爲標準varbinary(max)加載。

52

只需將您的財產聲明爲Ladislav提到的byte []。

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

    public string Name { get; set; } 

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

這是非常多的。如果您不映射該屬性,則會映射到varbinary(max)。 如果在數據庫中的圖像列已經只是在ProductImage屬性添加[Column(TypeName = "image")]或者如果你喜歡代碼映射這在上下文類添加到您的OnModelCreating覆蓋:

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

,我與它的問題是,我還沒有找到一種方法來使屬性懶惰,因爲我不一定要在每次獲取產品時都加載二進制數據。 我不知道我記得正確,但NHibernate可以開箱即用。

+0

是,NHibernate的可以做特定的列延遲加載開箱:http://ayende.com/blog/4377/nhibernate-new-feature-lazy-properties。 – gabe 2013-12-12 17:44:59

95

我總是創造這樣ProductImage另一個類有一個一對一的關聯,以管理延遲加載,也正常化表:

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

我看到使用這種技術的主要性能提高。 – jsturtevant 2013-08-18 11:45:18

相關問題