2016-11-18 34 views
1

私は、Dapper関連の統合で誰かを支援しています。現在、ストアドプロシージャに入るために必要なデータがあるシナリオがあります。複雑なオブジェクトの配列をdapperを使用してストアドプロシージャに渡す

public class SomeComplexObject 
{ 
    public string Something {get; set;} 
    public string SomethingElse {get;set;} 
} 

これは、1-N量からどこかでアレイ内のようになります。だから我々は、しかし、我々はしたいが、オブジェクトは次のようになります私たちが望む、とDapperのビットを書き込むことができますが、ストアドプロシージャを書くことができますこれらのオブジェクト。したがって、これらを内部のクエリの一部として使用するために、格納されたprocに渡す必要があります。

私のような何かをしていたのであれば:

new SqlParameter("arrayOfGoodies", arrayOfComplexObjects); 

を、それは私たちにエラーを与えるしかし:どのようにそれはPOCOSへのこの配列を変換する方法を知っているだろうと

No mapping exists from object type

これは理にかなっていますSQLの世界には何かがありますが、何とかこのデータをストアドプロシージャに取得する必要があります。だから、これを行う方法はありますか?このタイプのことをdapperに伝えるか、おそらくそれらのテーブル値パラメータのものを使うか、何かを使うでしょうか?

答えて

0

テーブル値付きパラメータとして配列を渡すことができます。残念ながら、最初にDataTableに変換する必要があります。例えば

conn.Execute("My_SP", new { values = myTable.AsTableValuedParameter("MyType") }, 
commandType: CommandType.StoredProcedure); 

いくつかのより多くの例here

関連する問題