Entity framework SQL文件流+;实体框架存储大型文件
当我想在filestream列中存储文件时,我总是需要将整个二进制文件读入内存: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 } 实体框架有没有一种方法,可以直接将流放入其中?因为,如果我想上传
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; }
}