2012-12-31 2 views
5

Как мне создать транзакцию, если мой DAL использует dapper-dot-net?Сделки в "dapper-dot-net"

My C# winform application будет использоваться в сети, и данные будут сохранены на центральном сервере sql.

Мой прецедент требует использования транзакций. Могу ли я сделать это с помощью dapper, или мне нужно использовать что-то вроде NHibernate?

Кроме того, существует ли какой-либо риск или ограничение в этой структуре, если я использую хранимые процедуры? Должен ли я изменить свой подход из-за возможных ограничений?

ответ

8

Я не возникнут какие-либо ограничения, связанные с использованием sprocs и риской вы имеете с Dapper той же риски, вы бы с sprocs

Вот простой пример того, как использовать транзакции с щеголеватым

using (var connection = Db.GetConnection()) 
{ 
    connection.Open(); 
    IDbTransaction transaction = connection.BeginTransaction(); 
    try 
    { 
     var newId= connection.Query<int>(@"Select id from table1 where [email protected]", new{id}, transaction).Single(); 
     connection.Execute(@"INSERT into table1 ...",new {p1, p2}, transaction); 
     connection.Execute(@"INSERT into table2 ...",new {p1, p2}, transaction); 
     transaction.Commit(); 
    } 
    catch (Exception ex) 
    { 
     transaction.Rollback(); 
    } 
} 
+0

:) Я вижу, что забыл объявить транзакцию как IDbTransaction. – mosesfetters

+0

Спасибо за ваши комментарии. Кроме того, я надеюсь, что при использовании хранимой процедуры не будет никаких ограничений или проблем. На самом деле, я новичок с драпиром, поэтому, я спросил. – DPSoni

+0

@DPSoni он будет вести себя одинаково с любым другим использованием ADO.NET –

3

dapper может использовать как транзакции ado.net, так и неявные транзакции. Для транзакций ado.net просто создайте транзакцию и укажите ее через параметр transaction, который доступен для основных методов. Для неявных транзакций просто используйте TransactionScope.