在 SQL Server 中存储图像的正确方法是什么?有没有办法用 ADO.NET Entity Framework 存储它们?我需要一些关于如何以最好和现代的方式做到这一点的好资源。
2 回答
如果您决定在 SQL Server 中存储图像,正确的方法是使用FILESTREAM类型。
有没有办法用 ADO.NET Entity Framework 存储它们?
问题是 FILESTREAM 是 SQL Server 特定的列,而 EF 被设计为与数据库无关。因此,您可以byte[]
在模型上拥有类型属性,但 EF 不会利用流式传输。它将作为标准加载varbinary(max)
。
您还可以使用本机SqlFileStream
类直接处理 ADO.NET 中的 FILESTREAM 列类型。这是一个blog post
显示示例的示例。
您可能还决定将文件存储在文件系统上并仅将文件路径保存在数据库中。
您可以以 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);
}
希望这可以帮助。
ps 我将图像存储在文件流中,并将“文件路径”保留在数据库中。