2017-05-04 17 views
0

Dapperのパラメータを使用してSQLを呼び出そうとしています。これは、SQLの関連部分は、私が「DynamicMethodの無効なタイプの所有者」を取得しておくDapperとパラメータを使用した非ストアドプロシージャクエリ(CommandType = Text)

" ... 

    WHERE 
     Customer = ISNULL(@customerName,Customer) 
     AND Station = ISNULL(@stationName,Station) 
"; 

あるストアドプロシージャ(私はパラメータで細かい作業をすることを持っている)

inputCustomerName = "Our Customer"; 
inputStationName = Null; 

    var parameters = new 
    { 
     customerName = inputCustomerName , 
     stationName = inputStationName  
    };  

    ... 

    using (var dbConn = dataProvider.CreateConnection) 
    { 
     dbConn.ConnectionString = connectionString; 
     dbConn.Open(); 
     returnValue = dbConn.Query<T>(sql: sql, commandType: commandType, param: parameters); 
     dbConn.Close(); 
    } 

ではありません。 (匿名のオブジェクトの代わりにDynamicParametersを使用している場合も同様です)。

SQLはデータベース自体で正常に動作します(@customerNameとstationNameを宣言し@populateすると)。

私は何か非常に単純な間違いをしたと思う - 誰でも私を啓発することができますか?

+0

http://stackoverflow.com/questions/30435185/dapper-throws-invalid-type-owner-for-dynamicmethodはこの支援している(しかし、私はいくつかの理由を想像することができますか)? – Lenny32

+0

投稿前に読んでください、私の状況ではありません。私は思っていません。 - 配列ではなくプロパティとしてプロパティを持つオブジェクトを渡しています。 – kpollock

+0

nullの代わりにinputStationNameの値をDBNull.Valueに設定できますか? – Lenny32

答えて

0

答えは、結局のところ、コードの問題は質問には含まれていませんでした。私は完全に謝ります。

問題は、TがInterfaceであり、それがDapperを爆破させた原因でした。おそらく、フードの中には、クラスを使用することができ、クエリーの型パラメータとしてインターフェイスを使用することができないということがあります。私はその制限が明示的に述べているのを見たことはありませんが。

恥は、

関連する問題