【问题标题】:Best Way To Store Images In SQL Server [duplicate]在 SQL Server 中存储图像的最佳方法 [重复]
【发布时间】:2013-01-25 14:34:06
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    您可以以 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);
    }
    

    希望这会有所帮助。

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

    【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2010-10-05
    • 1970-01-01
    • 2010-09-13
    • 2012-10-29
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多