2017-05-02 31 views
0

Dapper.netをASP.net MVC 5アプリケーションのデータレイヤーとして使用しています。Dapper.netでMERGEを実行

操作の1つは、(TitleIDが存在する場合、それがない場合は、それを挿入し、レコードを更新)MERGEコマンドを使用する必要がある - このような何かを:

MERGE BookInventory bi 
USING BookOrder bo 
ON bi.TitleID = bo.TitleID 
WHEN MATCHED THEN 
    UPDATE 
    SET bi.Quantity = bi.Quantity + bo.Quantity 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (TitleID, Title, Quantity) 
    VALUES (bo.TitleID, bo.Title,bo.Quantity); 

をマッピングするために使用することがDapperのことができます値をこのMERGE文に追加しますか?

Dapper.netでMERGEを使用する最良の方法は何ですか?これについては何も見つかりませんか?

答えて

1

テストされていないが、これはトリックを行う必要があります。

const string sql = @" 
    merge into SomeTable as Target 
    using (select @myId AS id) as Source 
    on (Target.id = Source.id) 
    when matched then 
     update set Target.SomeColumn = @myValue 
    when not matched by Target then 
     insert (SomeColumn) values (@myValue)"; 

conn.Execute(sql, new { myId = 999, myValue = 123 }) 
+0

ので、すべてのDapperのはないが見つける&パラメータに置き換える基本的にはありますか?それはSQLが何をしているのか気にしない? – niico

+0

Dapperには、特定のマージ方法がありません。それを試したことはありませんが、Dapper Plus、マージをサポートすると主張している商用ライブラリがあります。 –

+0

それができればいいですが、マージをサポートするすべてのデータベースが独自の構文を持っているので、Dapperはそれらをすべてサポートしたいので、かなりの作業が必要になると思います。 https://github.com/StackExchange/Dapper#user-content-will-dapper-work-with-my-db-provider –

関連する問題