2017-05-02 129 views
0

我們使用Dapper.net作爲ASP.net MVC 5應用程序中的數據層。使用Dapper.net執行MERGE

一次操作需要使用MERGE命令(如果存在TitleID,更新記錄,如果沒有,將其插入) - 是這樣的:

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); 

可以短小精悍用於映射值到這個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

因此所有短小精悍確實基本上是一個查找和替換的參數?它不關心sql在做什麼? – niico

+0

Dapper沒有用於合併的特定方法。還沒有嘗試過,但還有一個Dapper Plus,一個聲稱支持合併的商業庫。 –

+0

如果是這樣,它會很好,但是因爲支持合併的每個數據庫都有自己的語法,而且Dapper想要支持它們,我想這需要相當多的工作。 https://github.com/StackExchange/Dapper#user-content-will-dapper-work-with-my-db-provider –