9

ファイルをファイルストリーム列に保存する場合は、常にバイナリ全体をメモリに読み込む必要があります。

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

エンティティフレームワークを使用して、ストリームを直接配置する方法はありますか?なぜなら、大きなファイルをアップロードしたい場合、OutOfMemoryExceptionが発生するからです。

4

3 に答える 3

7

EFはをサポートしていませんFIlESTREAM。とのすべての対話をFILESTREAM通常のVARBINARY(MAX)列として処理するため、ストリーミングを使用する場合は、ADO.NETを直接使用する必要があります。

于 2012-04-07T16:31:50.710 に答える
2

EFでのFILESTREAMサポートに関する更新はありませんでした。(ここで.net 3.5 sp1リリースの部分的なサポートとして以前に言及され ました)。エンティティフレームワークがTSQLを介してFILESTREAMにアクセスしており、FILESTREAMのストリーミングパフォーマンスのメリットを享受できないことは明らかだと思います。(すべてのファイルコンテンツをメモリに読み込む必要があります

したがって、推奨されるアプローチはSqlFileStream.NetAPIで使用することです。

http://lennilobel.wordpress.com/2011/08/22/using-sqlfilestream-in-c-to-access-sql-server-filestream-data/

于 2012-04-07T16:34:48.300 に答える
1

あなたはそれを行うことができますが、それはいくつかの手作業を必要とします。FILESTREAM有効にする必要があります。

https://docs.microsoft.com/en-us/sql/relational-databases/blob/enable-and-configure-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列は存在せず、デフォルト値のみが含まれており、使用できません。SQLServerでのみ使用されます。

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

VM:

public class FileViewModel
{
    public string Title { get; set; }
    public HttpPostedFileBase File { get; set; }
}

ソース:

http://www.floatincode.net/post/sql-file-stream-in-asp.net-mvc-with-entity-framework

于 2017-06-14T09:27:32.207 に答える