2017-05-02 5 views
0

Wir verwenden Dapper.net für die Datenschicht in einer ASP.net MVC 5 App.Ausführen von MERGE mit Dapper.net

Eine Operation erfordert die Verwendung des MERGE-Befehl (wenn der TitleID vorhanden ist, aktualisieren Sie die Aufzeichnung, wenn es nicht der Fall ist, legen Sie es) - so etwas wie folgt aus:

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

Kann verwendet werden, Dapper zur Karte Werte auf diese MERGE-Anweisung?

Ich kann nichts darüber finden und es ist unklar, was der beste Ansatz für die Verwendung von MERGE mit Dapper.net ist?

Antwort

1

Ungeprüfte, aber das sollte es tun:

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

so alles adrett tut, ist im Grunde ein Suchen & Ersetzen auf die Parameter? Es ist egal, was der SQL tut? – niico

+0

Dapper verfügt nicht über spezifische Methoden zum Zusammenführen. Habe es noch nicht ausprobiert, aber da ist Dapper Plus, eine kommerzielle Bibliothek, die behauptet, Merge zu unterstützen. –

+0

Wäre nett, wenn das der Fall wäre, aber da jede Datenbank, die Merge unterstützt, ihre eigene Syntax dafür hat und Dapper sie alle unterstützen möchte, nehme ich an, dass es ziemlich viel Arbeit erfordern würde. https://github.com/StackExchange/Dapper#user-content-will-dapper-work-with-my-db-provider –