diff Source/DataAccess/DataAccessorBase.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/DataAccess/DataAccessorBase.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,195 @@
+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
+	}
+}