Mercurial > pub > bltoolkit
diff Source/DataAccess/SqlQueryT.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children | 99cd4f3947d8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/DataAccess/SqlQueryT.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,383 @@ +using System; +using System.Collections.Generic; + +namespace BLToolkit.DataAccess +{ + using Data; + using Mapping; + using Reflection.Extension; + + public class SqlQuery<T> : SqlQueryBase + { + #region Constructors + + public SqlQuery() + { + } + + public SqlQuery(DbManager dbManager) + : base(dbManager) + { + } + + public SqlQuery(DbManager dbManager, bool dispose) + : base(dbManager, dispose) + { + } + + public SqlQuery(ExtensionList extensions) + { + Extensions = extensions; + } + + #endregion + + #region Overrides + + public SqlQueryInfo GetSqlQueryInfo(DbManager db, string actionName) + { + return base.GetSqlQueryInfo(db, typeof(T), actionName); + } + + #endregion + + #region SelectByKey + + public virtual T SelectByKey(DbManager db, params object[] keys) + { + var query = GetSqlQueryInfo(db, typeof(T), "SelectByKey"); + + return db + .SetCommand(query.QueryText, query.GetParameters(db, keys)) + .ExecuteObject<T>(); + } + + public virtual T SelectByKey(params object[] keys) + { + var db = GetDbManager(); + + try + { + return SelectByKey(db, keys); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + #endregion + + #region SelectAll + + static SqlQueryInfo _selectAllQuery; + + public virtual List<T> SelectAll(DbManager db) + { + if (_selectAllQuery == null) + _selectAllQuery = GetSqlQueryInfo(db, typeof(T), "SelectAll"); + + return db + .SetCommand(_selectAllQuery.QueryText) + .ExecuteList<T>(); + } + + public virtual TL SelectAll<TL>(DbManager db, TL list) + where TL : IList<T> + { + var query = GetSqlQueryInfo(db, typeof(T), "SelectAll"); + + return db + .SetCommand(query.QueryText) + .ExecuteList<TL,T>(list); + } + + public virtual TL SelectAll<TL>(DbManager db) + where TL : IList<T>, new() + { + return SelectAll(db, new TL()); + } + + public virtual List<T> SelectAll() + { + var db = GetDbManager(); + + try + { + return SelectAll(db); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual TL SelectAll<TL>(TL list) + where TL : IList<T> + { + var db = GetDbManager(); + + try + { + return SelectAll(db, list); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual TL SelectAll<TL>() + where TL : IList<T>, new() + { + return SelectAll(new TL()); + } + + #endregion + + #region Insert + + public virtual int Insert(DbManager db, T obj) + { + var query = GetSqlQueryInfo(db, obj.GetType(), "Insert"); + + return db + .SetCommand(query.QueryText, query.GetParameters(db, obj)) + .ExecuteNonQuery(); + } + + public virtual int Insert(T obj) + { + var db = GetDbManager(); + + try + { + return Insert(db, obj); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual int Insert(DbManager db, int maxBatchSize, IEnumerable<T> list) + { + var query = GetSqlQueryInfo(db, typeof(T), "InsertBatch"); + + return db.DataProvider.InsertBatch( + db, + query.QueryText, + list, + query.GetMemberMappers(), + maxBatchSize, + obj => query.GetParameters(db, obj)); + } + + public virtual int Insert(int maxBatchSize, IEnumerable<T> list) + { + var db = GetDbManager(); + + try + { + return Insert(db, maxBatchSize, list); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual int Insert(DbManager db, IEnumerable<T> list) + { + return Insert(db, int.MaxValue, list); + } + + public virtual int Insert(IEnumerable<T> list) + { + return Insert(int.MaxValue, list); + } + + #endregion + + #region Update + + public virtual int Update(DbManager db, T obj) + { + var query = GetSqlQueryInfo(db, obj.GetType(), "Update"); + + return db + .SetCommand(query.QueryText, query.GetParameters(db, obj)) + .ExecuteNonQuery(); + } + + public virtual int Update(T obj) + { + var db = GetDbManager(); + + try + { + return Update(db, obj); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual int Update(DbManager db, int maxBatchSize, IEnumerable<T> list) + { + var query = GetSqlQueryInfo(db, typeof(T), "UpdateBatch"); + + db.SetCommand(query.QueryText); + + return ExecuteForEach( + db, + list, + query.GetMemberMappers(), + maxBatchSize, + obj => query.GetParameters(db, obj)); + } + + public virtual int Update(int maxBatchSize, IEnumerable<T> list) + { + var db = GetDbManager(); + + try + { + return Update(db, maxBatchSize, list); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual int Update(DbManager db, IEnumerable<T> list) + { + return Update(db, int.MaxValue, list); + } + + public virtual int Update(IEnumerable<T> list) + { + return Update(int.MaxValue, list); + } + + #endregion + + #region DeleteByKey + + public virtual int DeleteByKey(DbManager db, params object[] key) + { + var query = GetSqlQueryInfo(db, typeof(T), "Delete"); + + return db + .SetCommand(query.QueryText, query.GetParameters(db, key)) + .ExecuteNonQuery(); + } + + public virtual int DeleteByKey(params object[] key) + { + var db = GetDbManager(); + + try + { + return DeleteByKey(db, key); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + #endregion + + #region Delete + + public virtual int Delete(DbManager db, T obj) + { + var query = GetSqlQueryInfo(db, obj.GetType(), "Delete"); + + return db + .SetCommand(query.QueryText, query.GetParameters(db, obj)) + .ExecuteNonQuery(); + } + + public virtual int Delete(T obj) + { + var db = GetDbManager(); + + try + { + return Delete(db, obj); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual int Delete(DbManager db, int maxBatchSize, IEnumerable<T> list) + { + var query = GetSqlQueryInfo(db, typeof(T), "DeleteBatch"); + + db.SetCommand(query.QueryText); + + return ExecuteForEach( + db, + list, + query.GetMemberMappers(), + maxBatchSize, + obj => query.GetParameters(db, obj)); + } + + public virtual int Delete(int maxBatchSize, IEnumerable<T> list) + { + var db = GetDbManager(); + + try + { + return Delete(db, list); + } + finally + { + if (DisposeDbManager) + db.Dispose(); + } + } + + public virtual int Delete(DbManager db, IEnumerable<T> list) + { + return Delete(db, int.MaxValue, list); + } + + public virtual int Delete(IEnumerable<T> list) + { + return Delete(int.MaxValue, list); + } + + #endregion + + #region Helpers + + protected int ExecuteForEach( + DbManager db, + IEnumerable<T> collection, + MemberMapper[] members, + int maxBatchSize, + DbManager.ParameterProvider<T> getParameters) + { + return db.ExecuteForEach(collection, members, maxBatchSize, getParameters); + } + + #endregion + } +}