如何使用entity framework代码第一个CTP 5存储图像?

我只是想弄清楚是否有一个简单的方法来存储和检索二进制(文件)数据使用EF Code First CTP 5? 我真的很喜欢它使用FILESTREAMtypes,但我真的只是寻找一些方法使其工作。

您不能在EF中使用SQL FILESTREAM 。 EF应该在不同的数据库服务器上工作,但文件streamfunction是SQL 2008和更新的特定function。 你可以尝试以旧的方式做 – 在数据库表中使用varbinary(max) ,并在映射类中使用字节数组。

编辑:

一点说明 – 你可以在数据库中使用FILESTREAM ,但EF不会利用stream式传输。 它会将其作为标准varbinary(max)加载。

我总是创build另一个类像ProductImage与一对一的关联,以pipe理延迟加载,并规范化表:

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

只要声明你的财产为拉迪斯拉夫提到的字节[]。

 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"); 

我的问题是,我没有find一种方法来使属性懒惰,因为我不一定要加载二进制数据,每次我获取产品。 我不知道我记得正确,但NHibernate可以开箱即用。