在SQL Server中存储图像的正确方法是什么?有没有办法用ADO.NET实体框架存储它们?我需要一些很好的资源,如何以最好和最现代的方式做到这一点。
答案 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。我将图像存储在文件流中,并将“文件路径”保留在数据库中。