Entity framework SQL文件流+;实体框架存储大型文件

Entity framework SQL文件流+;实体框架存储大型文件,entity-framework,filestream,Entity Framework,Filestream,当我想在filestream列中存储文件时,我总是需要将整个二进制文件读入内存: using (MemoryStream memoryStream = new MemoryStream()) { sourceStream.CopyTo(memoryStream); binaryStore.Content = memoryStream.ToArray(); //Content = filestream column } 实体框架有没有一种方法,可以直接将流放入其中?因为,如果我想上传

当我想在filestream列中存储文件时,我总是需要将整个二进制文件读入内存:

using (MemoryStream memoryStream = new MemoryStream())
{
   sourceStream.CopyTo(memoryStream);
   binaryStore.Content = memoryStream.ToArray(); //Content = filestream column
}

实体框架有没有一种方法,可以直接将流放入其中?因为,如果我想上传一个大文件,我会得到一个OutOfMemoryException。

EF不支持
FIlESTREAM
。它像普通的
VARBINARY(MAX)
列一样处理与
FILESTREAM
的所有交互,因此如果要使用流式处理,必须直接使用ADO.NET。

在EF中未看到任何有关FILESTREAM支持的更新。(前面提到的是.NET3.5SP1版本的部分支持)。我假设实体框架是通过TSQL访问FILESTREAM的,显然您将无法获得FILESTREAM的流性能优势。(需要将所有文件内容读入内存)

因此,推荐的方法是与
SqlFileStream
.netapi一起使用


你可以做,但这需要一些手工操作。需要启用
FILESTREAM

表中,请注意所需的
unique rowguidcol not null
IdFile列

CREATE TABLE [dbo].[Files](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [IdFile] [uniqueidentifier] unique ROWGUIDCOL  NOT NULL,
    [Title] [nvarchar](max) NULL,
    [File] [varbinary](max) FILESTREAM  NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [id] ASC
))

GO

ALTER TABLE [dbo].[Files] ADD  CONSTRAINT [DF_Files_IdFile]  DEFAULT (newid()) FOR [IdFile]
GO
EF模型,IdFile列不存在,它只包含默认值,对我们没有用处。它仅由SQL Server使用:

[Table("Files")]
public class FileModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public byte[] File { get; set; }
}
虚拟机:

资料来源:


这可以用类似的方法解决吗?它似乎在使用EntityFramework和旧类型的连接。是的,如果没有其他方法,我将使用此方法。谢谢你给出了一个2年前的答案。。。你知道这在今天是否仍然是真的吗?我也有同样的问题。这仍然是真的吗?@jpgrassi:我不认为真正的文件流的工作方式有任何改变,但我已经有一段时间没有使用EF了,所以我可能是错的。这个链接可以帮助,
public class FileViewModel
{
    public string Title { get; set; }
    public HttpPostedFileBase File { get; set; }
}