通过EF将图像数据保存为MSSQL中的byte []

时间:2016-01-14 09:42:51

标签: c# sql-server entity-framework

该列是名为varbinary(MAX)的{​​{1}}。我从现有数据库生成了一个ADO.NET模型,用于EntityFramework。

创建新模型,我按如下方式设置字段:

Data

最后一行Image img = Image.FromFile(filename); var model = new Media(); MemoryStream ms = new MemoryStream(); img.Save(ms, ImageFormat.Jpeg); model.Data = ms.ToArray(); // the model field is of byte[] type db.Media.Add(model); db.SaveChanges(); 将引发db.SaveChanges()陈述:DbEntityValidationException

当我单步执行代码时,我发现我的示例图像(972x355,71,6 kB)导致Data must be a string or arraytype with max length '5000'的{​​{1}}值。这对db列来说太大了吗?我可以做些什么来允许数据库存储此图像?

我在不同的项目中使用类似的代码,这很好用。唯一的区别是我通过存储过程插入图像。存储过程对参数没有任何作用,只是简单地插入它。

1 个答案:

答案 0 :(得分:2)

在媒体模型中,如果数据库中的列是图像,则可以添加typename Image;如果使用varbinary(MAX),则可以正常使用byte[]

public partial class Media
{
   //[Column(TypeName = "image")]
   public byte[] Data {get; set;}
}

此外,您可以更轻松地获取字节:

model.Data = File.ReadAllBytes(filename);

顺便说一下,如果您的Media模型用于获取图像以外的其他内容,则应创建一个单独的模型来存储图像数据并与Media建立一对一的关系。这样,您每次需要Media模型时都不必获取整个图像。

相关问题