我有一些简单的实体,现在需要一个个人资料图像。这样做的正确方法是什么?因此,这是一对一的关系,一张图像仅与一个实体相关,反之亦然。此图像应通过网络表单上传,并插入相关实体。
如果有人能指出我正确的方向,那么如何将图像保存到数据库和相关实体将会很棒。
我有一些简单的实体,现在需要一个个人资料图像。这样做的正确方法是什么?因此,这是一对一的关系,一张图像仅与一个实体相关,反之亦然。此图像应通过网络表单上传,并插入相关实体。
如果有人能指出我正确的方向,那么如何将图像保存到数据库和相关实体将会很棒。
只是一个旁注:我认为将图像存储在 db 中不是一个好主意。
一般来说,在 db 中存储图像并不是一个好主意,因为 dbs 旨在存储文本而不是大的二进制块。存储图像的路径并将图像放在文件夹中要好得多。如果您想确定具有实体 ID (1323.jpg) 的 1 对 1 关系名称图像。
如果您想拥有图像路径,您应该遵循一些准则(一般代码防御性):
但我认为出于某种原因你应该这样做。所以为了达到你想要的:
数据库设计
C# 代码
用户字节数组来存储它
检查此链接以获取代码示例: http: //www.codeproject.com/Articles/21208/Store-or-Save-images-in-SQL-Server
代码很简单,但为什么是数据库?如果这是一个网站,为什么不将它保存到磁盘上可以轻松引用的位置呢?
数据库经过优化以存储已知大小和相对较小的数据。您的图像长度很可能超过 8KB(意味着它是 MAX 数据类型)。该图像将存储在与您的“个人资料”不同的行/页上。
就我个人而言,我会将图像保存在一个已知文件夹中,并使用 id 作为图像名称。对于没有图像并使用标准 gif 或类似文件的配置文件,可能通过将配置文件 id 的 simlinks/hardlinks 连接到通用 gif 来保持简单/修剪。
public class Profile
{
public int Id {get;}
public string Name {get; private set;}
public Image Picture {get; private set;}
public void Save()
{
using (var connection = new SqlConnection("myconnectionstring"))
using (var command = new SqlCommand("", connection))
{
command.CommandText =
"UPDATE dbo.TblProfile " +
"SET " +
"Name = @name, " +
"Picture = @picture " +
"WHERE ID = @id";
command.Parameters.AddWithValue("@name", Name);
command.Parameters.AddWithValue("@picture", Picture);
command.Parameters.AddWithValue("@id", Id);
command.ExecuteNonQuery();
}
}
}
我认为以下链接将为您提供解决方案,