2012-01-06 159 views
11

我有一个名为Attachment的POCO类,它映射到SqlServer中的一个表,其中包含一个VarBinary(max)字段。该字段包含文件。EF4将varbinary(max)映射到二进制 - 代码优先错误

的POCO类看起来像这样

public class Attachment 
{ 
    public string AttachmentId { get; set; } 
    public string AttachmentTypeId { get; set; } 
    public string Title { get; set; } 
    public string Text { get; set; } 
    public Binary Data { get; set; } 
} 

的映射看起来像这样

modelBuilder.Entity<Attachment>().Property(a => a.Data).HasColumnName("col_data"); 

但是映射抛出一个错误,如果我用

The type 'System.Date.Linq.Binary' must be a non-nullable value type in order to use it as a parameter 'T' 

映射工作正常一个字节数组,但这似乎是在破坏数据的途中。

在数据库中的文件有一个初步的二进制字符串,如: -

0x504B0304140008000800027923400000000000000000000000001F000000 

我认为这是一个JPG文件。 任何帮助将文件从数据库中取出在一块,将不胜感激。

+1

谷歌建议'0x504B0304'是一个zipfile的指标:http://www.google.co.uk/search?q=0x504B0304,如果有帮助的话? (顺便说一下,我认为'byte []'数组是正确的方式。) – 2012-01-06 12:41:56

+0

是什么让你认为它已损坏? – ken2k 2012-01-06 12:51:23

+0

谢谢欧文,这正是它的原因。现在有道理我知道它是什么。我现在可以解压缩文件并将内容传输到浏览器或文件系统。 – 2012-01-09 13:23:41

回答

21

Binary数据类型仅适用于Linq-to-Sql。 EF无法使用它。 EF的正确数据类型是字节数组(byte[])。