【问题标题】:Save a file in SQL Server 2008 database with Entity Framework使用实体框架在 SQL Server 2008 数据库中保存文件
【发布时间】:2026-01-11 00:10:02
【问题描述】:

如何使用 Entity Framework 在 SQL Server 2008 数据库中保存文件?

我想在 SQL Server 2008 中使用 FileStream。

【问题讨论】:

    标签: entity-framework sql-server-2008 filestream


    【解决方案1】:

    我不明白为什么这不起作用 - filestream 列只是公开为 varbinary(MAX) 所以你应该能够使用实体框架设置列:

    来自here的示例:

    Files newFile = new Files();
    newFile.FileID = Guid.NewGuid();
    newFile.FileContents = System.IO.File.ReadAllBytes("TextFile1.txt");
    ctx.AddObject("Files", newFile);
    ctx.SaveChanges();
    

    【讨论】:

    • 但这会将整个文件分配到内存中,对吧?有没有其他合理的方法?毕竟,这就是 FILESTREAM 的全部目的。
    • 好点 Simon - 该列将像任何其他 varbinary(MAX) 列一样被处理,因此这种方法虽然有效,但不会非常有效,甚至无法用于非常大的文件。
    • 绕过性能限制的方法是将文件存储在 azure blob 存储中,然后在数据库中保存对 blob 的引用。
    【解决方案2】:

    实体框架不支持文件流等 SQL 服务器特定功能。你不能用 EF 来做,你必须回退到 ADO.NET。

    编辑:

    取消删除我的答案,因为我刚刚测试了 EF 如何处理 FILESTREAM 列。 EF 确实适用于FILESTREAM 列,所以我的回答并不完全正确,@BrokenGlass 提供了解决方案。问题是 EF 忽略了 FILESTREAM 关键字,并且在使用 FILESTREAM 列时并没有真正使用流。该列作为任何其他二进制列处理。

    【讨论】: