2011-03-20 87 views

回答

7

我不明白为什么这是行不通的 - 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(); 
+5

但是,这将在内存中分配整个文件,对是否有任何其他合理的方式,毕竟,这是FILE * STREAM * – 2011-03-20 19:00:19

+1

好点西蒙的整个目的 - 列会处理就像任何其他'VARBINARY(MAX)'列,因此这种方法虽然* *工作,也不会是非常有效的,甚至可用于非常大的文件。 – BrokenGlass 2011-03-20 20:52:22

+0

我做些什么来绕过性能限制是存储在文件然后azure blob存储将对数据库中blob的引用保存起来。 – Amicable 2016-04-20 12:11:45

5

实体框架没有像FILESTREAM SQL服务器的特定功能的支持。你不能用EF来做,你必须回到ADO.NET。

编辑:

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

+0

真?!!!。 ?这是一个大问题:(( – 2011-03-20 18:07:15

相关问题