src/Library/NetPro.Dapper/DapperContext.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading;
namespace NetPro.Dapper
{
/// <summary>
/// 数据库上下文信息,推荐继承后使用
/// </summary>
public class DapperContext : IDisposable
{
private IDbConnection _connection;
private DbConnectionFactory _connectionFactory { get; set; }
private readonly ReaderWriterLockSlim _rwLock = new ReaderWriterLockSlim();
private readonly LinkedList<UnitOfWork> _workItems = new LinkedList<UnitOfWork>();
/// <summary>
/// <para>Default constructor.</para>
/// <para>Uses the <paramref name="connectionStringName"/> to instantiate a <see cref="DbConnectionFactory"/>. This factory will be used to create connections to a database.</para>
/// </summary>
/// <param name="connectionStringName">The name of the connectionstring as defined in a app/web.config file's connectionstrings section.</param>
public DapperContext(string connectionStringName, DataProvider dataProvider, bool miniProfilerEnabled = false)
{
DataProvider = dataProvider;
_connectionFactory = new DbConnectionFactory(connectionStringName, dataProvider, miniProfilerEnabled);
}
public void SetTempConnection(string sqlconnection)
{
_connectionFactory = new DbConnectionFactory(sqlconnection, DataProvider);
_connection = _connectionFactory.Create();
}
/// <summary>
/// Creates a new
/// </summary>
/// <param name="isolationLevel">The <see cref="IsolationLevel"/> used for the transaction inside this unit of work. Default value: <see cref="IsolationLevel.ReadCommitted"/></param>
/// <returns></returns>
public virtual UnitOfWork CreateUnitOfWork(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted)
{
CreateOrReuseConnection();
bool wasClosed = _connection.State == ConnectionState.Closed;
if (wasClosed) _connection.Open();
try
{
UnitOfWork unit;
IDbTransaction transaction = _connection.BeginTransaction(isolationLevel);
if (wasClosed)
unit = new UnitOfWork(transaction, RemoveTransactionAndCloseConnection, RemoveTransactionAndCloseConnection);
else
unit = new UnitOfWork(transaction, RemoveTransaction, RemoveTransaction);
_rwLock.EnterWriteLock();
_workItems.AddLast(unit);
_rwLock.ExitWriteLock();
后面还有 111 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。