在SQL Server中存储图像的最佳方法

时间:2013-02-10 08:48:59

标签: c# asp.net sql-server image entity-framework

在SQL Server中存储图像的正确方法是什么?有没有办法用ADO.NET实体框架存储它们?我需要一些很好的资源,如何以最好和最现代的方式做到这一点。

2 个答案:

答案 0 :(得分:5)

如果您决定在SQL Server中存储图像,那么正确的方法是使用FILESTREAM类型。

  

有没有办法用ADO.NET Entity Framework存储它们?

问题是FILESTREAM是SQL Server特定的列,而EF被设计为与数据库无关。因此,您可以在模型上使用byte[]类型的属性,但EF不会利用流式传输。它会将其加载为标准varbinary(max)

您还可以使用本机SqlFileStream类直接使用ADO.NET中的FILESTREAM列类型。这是一个显示示例的blog post

您可能还决定在文件系统上存储文件,并仅保存数据库中的文件路径。

答案 1 :(得分:0)

您可以以varbinary格式存储图像。在sql数据库表中创建两列类型varbinary(MAX)varchar(MAX)(可以使用任何大小)并选中“允许空值”。

在您的实体模型中添加两​​个属性:

public byte[] ImageData { get; set; } //Your image stored in binary data in the database
public string ImageMimeType { get; set; ) //just a string representation of Your image type,
                                          //this property is optional )

ImageMimeType您可以申请HiddenInputAttribute(DisplayValue=false)。您不需要将它应用于ImageData,因为框架无法将编辑器可视化为字节数组。

要在数据库中保存图像:(正如您在此处看到的,模型对象称为“产品”)

if (image != null) {
product.ImageMimeType = image.ContentType; 
product.ImageData = new byte[image.ContentLength];
image.InputStream.Read(product.ImageData, 0, image.ContentLength);
}

希望这有帮助。

P.S。我将图像存储在文件流中,并将“文件路径”保留在数据库中。