Mercurial > pub > bltoolkit
view Source/DataAccess/DataAccessorBase.cs @ 3:1ef98bd70424
!bug 100 +3h
Исправление проблемы BLToolkit + mono 3.4
author | cin |
---|---|
date | Fri, 22 Aug 2014 17:34:46 +0400 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
using System; using System.Collections; using System.Data; using BLToolkit.Aspects; using BLToolkit.Data; using BLToolkit.Mapping; using BLToolkit.Properties; using BLToolkit.Reflection.Extension; namespace BLToolkit.DataAccess { public abstract class DataAccessorBase { #region Constructors [System.Diagnostics.DebuggerStepThrough] protected DataAccessorBase() { } [System.Diagnostics.DebuggerStepThrough] protected DataAccessorBase(DbManager dbManager) { SetDbManager(dbManager, false); } [System.Diagnostics.DebuggerStepThrough] protected DataAccessorBase(DbManager dbManager, bool dispose) { SetDbManager(dbManager, dispose); } #endregion #region Public Members [NoInterception, System.Diagnostics.DebuggerStepThrough] public virtual DbManager GetDbManager() { return _dbManager ?? CreateDbManager(); } [NoInterception] protected virtual DbManager CreateDbManager() { return new DbManager(); } [NoInterception] public virtual void BeginTransaction() { if (_dbManager == null) throw new InvalidOperationException(Resources.DataAccessorBase_NoDbManager); _dbManager.BeginTransaction(); } [NoInterception] public virtual void BeginTransaction(IsolationLevel il) { if (_dbManager == null) throw new InvalidOperationException(Resources.DataAccessorBase_NoDbManager); _dbManager.BeginTransaction(il); } [NoInterception] public virtual void CommitTransaction() { if (_dbManager == null) throw new InvalidOperationException(Resources.DataAccessorBase_NoDbManager); _dbManager.CommitTransaction(); } [NoInterception] public virtual void RollbackTransaction() { if (_dbManager == null) throw new InvalidOperationException(Resources.DataAccessorBase_NoDbManager); _dbManager.RollbackTransaction(); } private ExtensionList _extensions; public ExtensionList Extensions { get { return _extensions ?? (_extensions = MappingSchema.Extensions); } set { _extensions = value; } } private bool _disposeDbManager = true; [NoInterception] public virtual bool DisposeDbManager { get { return _disposeDbManager; } set { _disposeDbManager = value; } } private MappingSchema _mappingSchema; public MappingSchema MappingSchema { get { return _mappingSchema ?? (_mappingSchema = _dbManager != null? _dbManager.MappingSchema: Map.DefaultSchema); } set { _mappingSchema = value; } } #endregion #region Protected Members private DbManager _dbManager; protected DbManager DbManager { get { return _dbManager; } } protected internal void SetDbManager(DbManager dbManager, bool dispose) { _dbManager = dbManager; _disposeDbManager = dispose; } [NoInterception] protected virtual string GetDefaultSpName(string typeName, string actionName) { return typeName == null? actionName: string.Format("{0}_{1}", typeName, actionName); } private static readonly Hashtable _actionSproc = new Hashtable(); [NoInterception] protected virtual string GetSpName(Type type, string actionName) { if (type == null) return GetDefaultSpName(null, actionName); string key = type.FullName + "$" + actionName; string sprocName = (string)_actionSproc[key]; if (sprocName == null) { object[] attrs = type.GetCustomAttributes(typeof(ActionSprocNameAttribute), true); foreach (ActionSprocNameAttribute attr in attrs) { if (attr.ActionName == actionName) { sprocName = attr.ProcedureName; break; } } if (sprocName == null) sprocName = GetDefaultSpName(GetTableName(type), actionName); _actionSproc[key] = sprocName; } return sprocName; } [NoInterception] protected virtual string GetDatabaseName(Type type) { bool isSet; return MappingSchema.MetadataProvider.GetDatabaseName(type, Extensions, out isSet); } [NoInterception] protected virtual string GetOwnerName(Type type) { bool isSet; return MappingSchema.MetadataProvider.GetOwnerName(type, Extensions, out isSet); } [NoInterception] protected virtual string GetTableName(Type type) { bool isSet; return MappingSchema.MetadataProvider.GetTableName(type, Extensions, out isSet); } [NoInterception] protected virtual void Dispose(DbManager dbManager) { if (dbManager != null && DisposeDbManager) dbManager.Dispose(); } #endregion } }