我有一些简单的实体,现在需要有一个个人资料图片。这样做的正确方法是什么?因此,它是1对1关系,一个图像仅与一个实体相关,反之亦然。该图像应通过webform与插入相关实体一起上传。
如果有人能指出我正确的方向如何将图像持久保存到数据库和相关实体将是伟大的。
答案 0 :(得分:5)
只是一个侧面评论:我认为在db 中存储图像不是一个好主意。
一般来说,在db中存储图像并不是一个好主意,因为dbs旨在存储文本而不是大的二进制块。存储图像的路径和在文件夹中包含图像要好得多。如果你想确定具有实体ID的1对1关系名称图像(1323.jpg)。
如果你想拥有图像路径,你应该遵循一些指导原则(一般代码是防御性的):
但我认为出于某种原因你应该这样做。 所以为了实现你想要的目标:
数据库设计
C#代码
用于存储它的用户字节数组
选中此链接以获取代码示例:http://www.codeproject.com/Articles/21208/Store-or-Save-images-in-SQL-Server
答案 1 :(得分:1)
代码很简单,但为什么DB呢? 如果这是一个网站,为什么不将它保存到磁盘上可以轻松引用的位置?
数据库经过优化,可存储已知大小和相对较小的数据。你的图像长度很可能超过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();
}
}
}
答案 2 :(得分:0)
我认为以下链接可以为您提供解决方案,