我有一些简单的实体,现在需要有一个个人资料图像。执行此操作的正确方法是什么?因此,这是一对一的关系,一张图像仅与一个实体相关,反之亦然。该图像应通过网络表单上传并插入相关实体。
如果有人能指出如何将图像持久保存到数据库和相关实体的正确方向,那就太好了。
只是一个侧面评论:我认为将图像存储在数据库中不是一个好主意.
一般来说,将图像存储在数据库中并不是一个好主意,因为数据库旨在存储文本而不是大的二进制块。最好存储图像路径并将图像放在文件夹中。如果您想确定具有实体 ID 的 1 对 1 关系名称图像 (1323.jpg)。
如果您想要图像路径,您应该遵循一些准则(在一般代码中是防御性的):
- 上传图像时检查图像是否有效(甚至对图像标题进行了二进制检查)
- 在插入新实体时不允许覆盖现有图像。
- 将图像命名为主键(1.jpg、2.jpg)
- 加载图像时,不要假设图像会在那里。
- 不允许(如果可能)与图像进行手动交互(禁止在机器中进行远程处理以及将图像从一处复制到另一处)。手动交互可能会导致不一致。
但我认为出于某种原因你应该这样做。所以为了实现你想要的:
数据库设计
- 在表中创建二进制列(binary 或 varbinary)
- 如果您在具有 1-1 关系的不同表中创建它会更好。然而,这个想法是避免在水合实体时加载图像。使用延迟加载方法仅在需要时加载图像。
- 当您进行大选择时,您必须避免加载图像(例如,如果您想加载组合中的所有实体,请避免从任何内容中选择 SELECT *),因为它会免费加载数千张图像。正如我所说,这可以通过将图像放在不同的表中,或者在 SELECT 中仅加载适当的列或通过延迟加载来完成。 (或者更好的是数据库中没有图像,只有路径)
C# Code
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)