使用Entity Framework将文件保存到SQL Server 2008数据库

3

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

我想在SQL Server 2008中使用FileStream。

2个回答

6
我不明白为什么这不能实现 - filestream列只是作为varbinary(MAX)暴露,所以您应该能够使用Entity Framework设置该列:
来自这里的示例:
Files newFile = new Files();
newFile.FileID = Guid.NewGuid();
newFile.FileContents = System.IO.File.ReadAllBytes("TextFile1.txt");
ctx.AddObject("Files", newFile);
ctx.SaveChanges();

5
但这会把整个文件都分配到内存中,是吗?还有其他合理的方法吗?毕竟,这就是 FILE* STREAM* 的全部目的。 - Simon Mourier
1
Simon的观点很好 - 该列将像任何其他varbinary(MAX)列一样处理,因此虽然这种方法可以工作,但对于非常大的文件来说不会很高效或甚至无法使用。 - BrokenGlass
我为了绕过性能限制所做的是将文件存储在Azure Blob存储中,然后在数据库中保存Blob的引用。 - Amicable

5
实体框架不支持SQL Server特定的功能,如文件流。你不能通过EF实现这一点,必须退回到ADO.NET。
编辑:
撤销我的答案,因为我刚测试了EF如何处理FILESTREAM列。EF确实可以使用FILESTREAM列,所以我的答案并不完全正确,@BrokenGlass提供了解决方案。问题在于EF忽略了FILESTREAM关键字,并没有真正使用流来处理FILESTREAM列。该列被处理为任何其他二进制列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接