我希望我的C#应用程序允许客户端上传和下载音频文件,并且必须将它们存储在数据库中。我应该使用哪种SQL Server中合适的数据类型?
答案 0 :(得分:1)
使用EntityFramework CodeFirst byte []将自动映射到varbinary(max)
public class AudioFile
{
//TODO: DB generated
[Key]
public int ID { get; set; }
//This will automatically map to varbinary(max)
public byte[] FileData { get;set; }
public string LocalFileName { get;set;}
public string MIMEType {get;set;}
}
虽然您使用通用字节[]进行存储,但您可以在类中添加更多封装以进行特化。实际的FileData字段不需要任何Audio数据类型。
public partial class AudioFile
{
public void Play()
{
//TODO
}
}
只考虑SQL Server和最佳数据类型
Varbinary(max)是用于存储所有文件类型的二进制数据的最佳类型。这不包括对 FileStreaming 的考虑,也不包括在文件夹中将文件与数据库分开存储。
Varbinary Limitation - 如果您要存储大量这些音频流,并且您正在使用SQL Server Express,则很快就会达到10GB的限制。您可以继续使用更多数据库进行分区,但一般来说,将文件数据存储在数据库字段中是个坏主意。
如果您刚刚启动原型应用程序或第一个版本,请保持范围缩小。
FileStream 是一个不错的选择。如果是第一次在SQL Server上配置它需要一些时间。
但我经常选择自己的文件夹。它在Web应用程序上下文中要简单得多,可以直接公开该文件夹以进行静态文件下载和CDN缓存(取决于信息的敏感性)。
总结: