Max*_*ing 83 .net entity-framework sql-server-2008 ef-code-first
我只想弄清楚是否有一种使用EF Code First CTP 5存储和检索二进制(文件)数据的简单方法?我真的希望它使用FILESTREAM类型,但我真的只是想找到一些方法来使它工作.
nim*_*ima 110
我总是创建另一个类,如同ProductImage一对一的关联,以便管理延迟加载和规范化表:
public class ProductImage
{
public int ProductId { get; private set; }
public byte[] Image { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Cos*_*nea 61
只需将您的属性声明为像Ladislav提到的byte [].
public class Product
{
public int Id { get; private set; }
public string Name { get; set; }
public byte[] ProductImage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这就是它.如果您没有映射属性,那么它将映射到a varbinary(max).如果数据库中有一个image列,则只需[Column(TypeName = "image")]在ProductImage属性上添加,或者如果您更喜欢代码映射,请将其添加到上下文类中的OnModelCreating覆盖:
modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我没有找到一种方法使属性变得懒惰,因为我不一定要在每次获取产品时加载二进制数据.我不确定我是否记得正确,但NHibernate可以开箱即用.
Lad*_*nka 42
您不能FILESTREAM在EF中使用SQL .EF应该在不同的数据库服务器之上工作,但文件流功能是SQL 2008及更新版本的特定功能.您可以尝试以旧方式执行 - varbinary(max)在数据库表中使用并在映射类中使用字节数组.
编辑:
很少澄清 - 您可以FILESTREAM在数据库中使用,但EF不会利用流媒体.它将作为标准加载它varbinary(max).