2017-04-11 2 views
4

Dapper를 통해 저장 프로 시저에 대한 테이블로 테이블을 전달하려고 시도 할 때마다 Dapper에서 직접 지원됨을 나타내는 this SO answer이 나타났습니다.dotnet 코어의 dapper에 입력 매개 변수로 테이블을 전달하는 경우

그러나 dotnet core에서는 DataTable seems not to be implemented이므로이 기능은 작동하지 않습니다.

Dapper를 사용하여 저장 프로 시저에 매개 변수로 사용자 정의/사용자 정의 테이블을 전달하는 또 다른 쉬운 방법이 있습니까?

답변

3

지금은 각 테이블 값 형식에 대해 SqlMapper.IDynamicParameters를 구현하는 클래스를 만들어야합니다. (하지 테스트)

수정 예를

http://todothinkofname.net/2016/05/30/Dapper-with-Net-core/

public class ParameterTvp : SqlMapper.IDynamicParameters 
    { 
     private readonly IEnumerable<string> _parameters; 

     public ParameterTvp(IEnumerable<string> parameters) 
     { 
      _parameters = parameters; 
     } 

     public void AddParameters(IDbCommand command, SqlMapper.Identity identity) 
     { 
      var sqlCommand = (SqlCommand) command; 
      sqlCommand.CommandType = CommandType.StoredProcedure; 
      var items = new List<SqlDataRecord>(); 
      foreach (var param in _parameters) 
      { 
       var rec = new SqlDataRecord(new SqlMetaData("Parameter", SqlDbType.NVarChar, 100)); 
       rec.SetString(0, param); 
       items.Add(rec); 
      } 

      var p = sqlCommand.Parameters.Add("@param", SqlDbType.Structured); 
      p.Direction = ParameterDirection.Input; 
      p.TypeName = "ParameterTableType"; 
      p.Value = items; 
     } 
    } 

사용

using (var connection = new SqlConnection(connectionString)) 
    { 
    var parameters = new ParameterTvp(new List<string>() { "XXXXXXXX" }); 
    connection.Execute("test", parameters); 
    } 
+0

[여기] (http://stackoverflow.com/questions/41132350/is-there-a-way-to-pass-a-tvp-to-dapper-on-net-core-right-now) another 예를 들어 스택에. – bbsimonbb

+0

링크 된 리소스의 일부 샘플 코드를 여기로 되돌릴 수 있습니까? – VMAtm

+0

@VMAtm 해당 링크에서 수정 된 코드 예제를 추가했습니다. –

0

당신은 like this, IEnumerable<SqlDataRecord> 전달할 수 있어야합니다. System.Data에 있으며 더 이상 사용되지 않습니다.

관련 문제