C# 使用Entity Framework 6从SQL Server保存和检索图像(二进制)

C# 使用Entity Framework 6从SQL Server保存和检索图像(二进制),c#,entity-framework,bitmap,binary,C#,Entity Framework,Bitmap,Binary,我正在尝试将位图图像保存到数据库 Bitmap map = new Bitmap(pictureBoxMetroMap.Size.Width, pictureBoxMetroMap.Size.Height); 我用datatypebinary在数据库中创建了一个列imgcontent,但我的问题是如何将这个位图(map)转换为二进制数据 如何从数据库中检索数据 我在谷歌上搜索了一下,发现了类似这样的东西,但没用: byte[] arr; ImageConverter converter = n

我正在尝试将位图图像保存到数据库

Bitmap map = new Bitmap(pictureBoxMetroMap.Size.Width, pictureBoxMetroMap.Size.Height);
我用datatype
binary
在数据库中创建了一个列
imgcontent
,但我的问题是如何将这个
位图(map)转换为二进制数据

如何从数据库中检索数据

我在谷歌上搜索了一下,发现了类似这样的东西,但没用:

byte[] arr;
ImageConverter converter = new ImageConverter();
arr = (byte[])converter.ConvertTo(map, typeof(byte[]));

将图像转换为
字节[]
,并将其存储在数据库中


将此列添加到模型中:

public byte[] Content { get; set; }
然后将图像转换为字节数组,并像存储任何其他数据一样存储:

public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
    using(var ms = new MemoryStream())
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

        return ms.ToArray();
    }
}

public Image ByteArrayToImage(byte[] byteArrayIn)
{
     using(var ms = new MemoryStream(byteArrayIn))
     {
         var returnImage = Image.FromStream(ms);

         return returnImage;
     }
}
资料来源:

当您想要取回图像时,请从数据库中获取字节数组,并使用
ByteArrayToImage
图像执行所需操作


字节[]
变大时,这将停止工作。它适用于100Mb以下的文件

@JensB谢谢你,但你没有使用EF!!我说的对吗?如果我想保存一个超过100MB的文件怎么办?如何调整代码?@bangbang然后我个人会考虑将文件存储在磁盘上,并将文件的路径保存在数据库中。但是,如果仍要将其保存在DB中,请使用varbinary(max)。限制2GB。@AdeelShekhani对我来说,问题不是数据库无法存储它,而是EF将超时或需要很长时间才能将其发送到数据库。
var image = new ImageEntity()
{
   Content = ImageToByteArray(image)
};

_context.Images.Add(image);
_context.SaveChanges();