Can anyone shed some light on using Glimpse with Dapper, or is it just for the Entity Framework?
EDIT
public List<UserRole> GetUserRoles(string userName)
{
using (var block = new TransactionBlock())
{
const string sql = "SELECT AspNetRoles.Name FROM AspNetUsers INNER JOIN " +
"AspNetUserRoles ON AspNetUsers.Id = AspNetUserRoles.UserId INNER JOIN " +
"AspNetRoles ON AspNetUserRoles.RoleId = AspNetRoles.Id " +
"WHERE (AspNetUsers.UserName = @userName)";
var results = TransactionBlock.Connection.Query<UserRole>(sql, new{userName}, transaction: TransactionBlock.Transaction).ToList();
block.Commit();
return results;
}
}
* EDIT *
public class TransactionBlock : IDisposable
{
private bool m_FirstTransactionBlock = false;
private bool m_Disposed = false;
public TransactionBlock(string connectionStringConfigKey = null)
{
if (connectionStringConfigKey != null && CurrentTransaction != null)
throw new Exception("Can't create a new transactionBlock with a specific connectionstring if you are already within a block.");
if (CurrentTransaction == null)
{
var localConnectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
var conn = new SqlConnection(localConnectionString);
try
{
conn.Open();
}
catch (SqlException ex)
{
if (ex.Class != 20) throw;
SqlConnection.ClearPool(conn);
try { conn.Open(); }
catch { conn = null; }
if (conn == null) throw;
}
CurrentTransaction = conn.BeginTransaction();
m_FirstTransactionBlock = true;
}
}
public void Commit()
{
if (m_FirstTransactionBlock)
{
Dispose(true);
}
}
public void Dispose()
{
if (m_FirstTransactionBlock)
{
Dispose(false);
}
}
public void Dispose(bool commit)
{
if (m_Disposed)
return;
try
{
var transaction = CurrentTransaction;
var connection = transaction.Connection;
if (commit)
{
transaction.Commit();
}
else
{
transaction.Rollback();
}
if (connection != null)
{
connection.Close();
connection.Dispose();
}
transaction.Dispose();
}
finally
{
CurrentTransaction = null;
m_Disposed = true;
}
}
private static SqlTransaction CurrentTransaction
{
get
{
return CurrentContext.GetItem<SqlTransaction>("__Transaction");
}
set
{
CurrentContext.SetItem("__Transaction", value);
}
}
public static SqlConnection Connection
{
get { return CurrentTransaction.Connection; }
}
public static SqlTransaction Transaction
{
get { return CurrentTransaction; }
}
public static string ConnectionString
{
get
{
return System.Configuration.ConfigurationManager.AppSettings.Get("ConnectionString");
}
}
source
share