用C#EF 6->;处理图像和视频;建议的最大文件大小

用C#EF 6->;处理图像和视频;建议的最大文件大小,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,在我们的业务应用程序中,我们处理图像和视频。我根据以下答案创建了实体框架模型: 我知道这将导致varbinary(MAX)的限制在2GB左右,因为EF不支持FILESTREAM开箱即用 但是,我找不到的是建议的最大文件大小是多少?我知道这可能属于基于意见的,但我希望给定的环境允许这样做。对于5 mb左右的图像和200 mb左右的视频,只有在用户希望看到它们时才能获取它们(名称将显示在前端) 这是一个好的解决方案还是我应该一起重新思考?即使默认情况下不支持FILESTREAM,实现它是否有益

在我们的业务应用程序中,我们处理图像和视频。我根据以下答案创建了实体框架模型:

我知道这将导致
varbinary(MAX)
的限制在2GB左右,因为EF不支持
FILESTREAM
开箱即用

但是,我找不到的是建议的最大文件大小是多少?我知道这可能属于基于意见的,但我希望给定的环境允许这样做。对于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; }
}
公共类媒体
{
[关键]
公共int Id{get;set;}
已创建公共日期时间{get;set;}
公共日期时间已更新{get;set;}
公共虚拟ICollection映像{get;set;}
公共虚拟ICollection视频{get;set;}
}
公众阶级形象
{
[关键]
公共int Id{get;set;}
已创建公共日期时间{get;set;}
公共日期时间已更新{get;set;}
公共字符串名称{get;set;}
公共虚拟字节[]映像{get;set;}
公共int MediaId{get;set;}
公共虚拟媒体{get;set;}
}
公开课视频
{
[关键]
公共int Id{get;set;}
已创建公共日期时间{get;set;}
公共日期时间已更新{get;set;}
公共字符串名称{get;set;}
公共虚拟字节[]视频{get;set;}
公共int MediaId{get;set;}
公共虚拟媒体{get;set;}
}

实际上没有任何客观的方法来决定你的最大值应该是多少

SQL只提供数据所需的内容,因此,如果您对列数据类型使用了
varbinary(max)
,并且其中只有一个200MB的视频文件,那么字段的容量是否为2GB并不重要,因为它只使用200MB


考虑到这一点,我建议无论如何使用varbinary(max),除非您确切知道每个文件将有多大。这样,您就可以确保有足够的空间放置它,并且不会让数据被截断以适应需要。

整个.net framework的最大内存大小为2GB,因此,如果您要做的任何事情的大小甚至接近2GB,那么您必须设计一个缓冲系统,将数据分块到更小的部分,因此,您要保存到数据库中的是块,而不是文件,并且对于一个文件可以拆分成多少块没有限制,因此在中,文件大小没有限制,通常以内存页大小为目标,即4KBEF不支持文件流开箱即用否,但如果表中有FILESTREAM列,EF将通过
SqlFileStream
对象以优化的流方式对其进行读写。不要将图像和视频存储在数据库中,而是存储在文件系统中。在数据库中维护这些文件的路径。@Jehof我不同意。它们不应该存储在常规表列中,而是存储在filestream列中。存储指向外部文件系统的链接是一场灾难。