使用实体框架将文件保存在数据库中

Fre*_*ddy 17 .net c# asp.net-mvc upload entity-framework

我有一个基于Entity Framework和Microsoft SQL Server 2008的ASP.NET MVC解决方案.我需要创建一个允许我的用户上传文件的功能.

我想要的是:

  • 使用实体框架在数据库中存储文件的解决方案
  • 一种解决方案,可以检测并阻止通过某种散列/校验和两次上传同一文件
  • 关于数据库/表格设计的提示

Tho*_*que 44

在实体模型中,将BLOB数据库列映射到byte[]属性.将上载文件的内容分配给实体对象的该属性,并保存更改ObjectContext.

要计算哈希值,您可以使用MD5CryptoServiceProvider该类

  • 这个答案有什么问题?你能否至少给出downvote的理由?这是我真正讨厌的一件事:那些没有解释就贬低的人......这是无用的 (13认同)
  • 不知道......但为你的麻烦拿一个+1.:) (6认同)
  • 关于这一点的不好的部分是大文件可能通过使用字节数组而不是流来炸毁你的RAM :( (4认同)

Cra*_*ntz 10

在SQL Server 2008数据库中存储文件的"正确"方法是使用FILESTREAM数据类型.我不知道实体框架支持这一点,但您当然可以尝试看看会发生什么.

也就是说,大多数时候人们这样做,他们不会将文件存储在数据库中.这样做意味着您需要通过ASP.NET和数据库服务器来提供可以直接从Web服务器提供的文件.它还可能使您的数据库和站点的备份图片有些复杂化.因此,当我们将文件上传到MVC/Entity Framework时,我们只存储对数据库中文件位置的引用,并将文件本身存储在其他位置.

显然,哪种策略适合您,很大程度上取决于您的应用程序的细节.


Geo*_*ker 5

这是我为Podcasts做的方式:


ID     Title         Path                    Summary              UploadDate
---    -----        --------              ----------------        -----------
1     TestPodcast   /Podcasts/ep1.mp3      A test podcast         2010-02-12

path商店播客的物理位置的参考.我使用了来自Scott Hanselman的文章上传与ASP.NET MVC的文章来处理文件上传部分.