【发布时间】:2017-11-16 09:28:22
【问题描述】:
在我们的业务应用程序中,我们处理图像和视频。我已经根据这个答案创建了实体框架模型:
https://stackoverflow.com/a/6241232/3850405
我知道这将导致 varbinary(MAX) 限制为大约 2 GB,因为 EF 不支持开箱即用的 FILESTREAM。
https://stackoverflow.com/a/5723825/3850405
我找不到推荐最大文件大小是多少?我知道这可能属于基于意见的情况,但我希望给定的上下文允许它。对于图像,我想大约 5 mb 和 200 mb 的视频,并且仅在用户想要查看它们时才获取它们(名称将显示在前端)。
这是一个好的解决方案还是我应该重新考虑一下?即使默认不支持FILESTREAM,实现它是否有益?
当前型号:
public class Media
{
[Key]
public int Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public virtual ICollection<Image> Images { get; set; }
public virtual ICollection<Video> Videos { get; set; }
}
public class Image
{
[Key]
public int Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public string Name { get; set; }
public virtual byte[] Image { get; set; }
public int MediaId { get; set; }
public virtual Media Media { get; set; }
}
public class Video
{
[Key]
public int Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public string Name { get; set; }
public virtual byte[] Video { get; set; }
public int MediaId { get; set; }
public virtual Media Media { get; set; }
}
【问题讨论】:
-
整个 .net 框架的最大内存大小为 2GB,所以如果您正在做任何接近 2GB 大小的事情,那么您将不得不设计一个缓冲系统来将您的数据分块为更小的部分,因此,您将保存到数据库中的是块而不是文件,并且由于文件可以拆分成多少块没有限制,因此文件大小没有限制
-
块大小通常针对内存页面大小,即 4KB
-
EF 不支持开箱即用的 FILESTREAM 不,但是如果一个表有一个 filestream 列,EF 会对其进行读写,只是不是以优化的流方式通过
SqlFileStream对象。 -
不要将图像和视频存储在数据库中,而是存储在文件系统中。在数据库中维护这些文件的路径。
-
@Jehof 我不同意。它们不应存储在常规表列中,而应存储在文件流列中。存储指向外部文件系统的链接是一场灾难。
标签: c# entity-framework entity-framework-6