2016-09-06 7 views
1

내 프로젝트에서 Dapper.NET을 ORM 레이어로 사용하고 있습니다. 파일 업로드 및 다운로드를 위해 WebApis를 작성하려고합니다. 그러나 나는 그것을 작동시킬 수 없다. 나는 이미 도움을 찾을 정도로 수색했지만 아무 것도 찾을 수 없었다.Dapper.NET을 사용하여 SQL 파일 테이블에 파일 스트림을 삽입 할 수 없습니다.

단순히 ADO.NET을 사용하는 경우 파일 스트림에 VarBinary 형식의 SqlParameter를 사용할 수있었습니다. 그러나 Dapper.NET 쿼리 매개 변수는 동적 개체입니다. 따라서 다음 코드는 레코드를 파일 테이블에 삽입하지 못합니다.

var fileStream = await Request.Content.ReadAsStreamAsync(); 

var streamId = Guid.NewGuid(); 
var fileName = streamId.ToString(); 

var sql = @"Insert into Attachments(stream_id, file_stream, name) 
      Values(@streamId, @fileStream, @fileName)"; 

using (var db = new SqlConnection(AppConfig.ConnectionString)) 
{ 
    await db.ExecuteAsync(sql, new { streamId, fileStream, fileName); 
} 

fileStream.Close(); 

예외 발생 'System.NotSupportedException를'가 mscorlib.dll에서

추가 정보 : System.IO.Stream 형의 부재 FILESTREAM은 파라미터 값

으로 사용할 수 없다

누구든지이 작업을 수행했거나 사용할 수있는 더 이상 확장 플러그인을 알고 있습니까?

답변

2

DynamicParameters 클래스를 사용하고 매개 변수의 데이터 형식을 지정해야합니다. 예를 들어 나는 많은 제이미, 그것은 나를 위해 DynamicParameters와 함께 완벽하게 작동한다 스트림 VARBINARY (MAX)라는 열이

  using (var connection = new SqlConnection(Properties.Settings.Default.connectionString)) 
      { 
       connection.Open(); 
       using (var fs = File.Open(Properties.Settings.Default.filePath, FileMode.Open)) 
       { 
        var sql = "INSERT INTO TEST (Stream) VALUES (@fs)"; 

        var dParams = new DynamicParameters(); 
        dParams.Add("@fs", fs, DbType.Binary); 

        connection.Execute(sql, dParams); 
       } 
      } 
+0

감사를 표 TEST를 만들었습니다. 나는이 정보를 찾기가 왜 그렇게 힘든지 궁금하다. 이 질문과 답변이 다른 사람들을 돕기를 바랍니다. – Rajiv