SqlSugar/SqlSugar/SqlSugarClient.cs
sunkaixuan f3128e88e0 -
2017-05-01 14:23:13 +08:00

302 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
///<summary>
/// ** descriptionCreate database access object
/// ** authorsunkaixuan
/// ** date2017/1/2
/// ** qq:610262374
/// </summary>
public partial class SqlSugarClient : SqlSugarAccessory, IDisposable
{
#region constructor
/// <summary>
/// If you have system table permissions, use this
/// </summary>
/// <param name="config"></param>
public SqlSugarClient(SystemTablesConfig config)
{
base.CurrentConnectionConfig = config;
base.InitConstructor();
}
/// <summary>
/// If you do not have system table permissions, use this
/// </summary>
/// <param name="config"></param>
public SqlSugarClient(AttrbuitesCofnig config)
{
base.CurrentConnectionConfig = config;
Check.ArgumentNullException(config.EntityNamespace, ErrorMessage.EntityNamespaceError);
base.EntityNamespace = config.EntityNamespace;
base.InitConstructor();
}
/// <summary>
/// Read / write mode. If you have system table permissions, use this
/// </summary>
/// <param name="masterConnectionConfig"></param>
/// <param name="slaveConnectionConfigs"></param>
public SqlSugarClient(SystemTablesConfig masterConnectionConfig, IConnectionConfig[] slaveConnectionConfigs)
{
base.CurrentConnectionConfig = masterConnectionConfig;
base.InitConstructor();
if (slaveConnectionConfigs.IsNullOrEmpty()) return;
var db = this.Database;
db.MasterConnectionConfig = masterConnectionConfig;
db.SlaveConnectionConfigs = slaveConnectionConfigs.ToList();
}
/// <summary>
/// Read / write mode. If you do not have system table permissions, use this
/// </summary>
/// <param name="masterConnectionConfig"></param>
/// <param name="slaveConnectionConfigs"></param>
public SqlSugarClient(AttrbuitesCofnig masterConnectionConfig, IConnectionConfig[] slaveConnectionConfigs)
{
base.CurrentConnectionConfig = masterConnectionConfig;
base.InitConstructor();
if (slaveConnectionConfigs.IsNullOrEmpty()) return;
var db = this.Database;
Check.ArgumentNullException(masterConnectionConfig.EntityNamespace, ErrorMessage.EntityNamespaceError);
base.EntityNamespace = masterConnectionConfig.EntityNamespace;
db.MasterConnectionConfig = masterConnectionConfig;
db.SlaveConnectionConfigs = slaveConnectionConfigs.ToList();
}
#endregion
#region ADO Method
/// <summary>
///Database operation
/// </summary>
public virtual IDb Database
{
get
{
if (_Ado == null)
{
var reval = InstanceFactory.GetDb(base.CurrentConnectionConfig);
Check.ConnectionConfig(base.CurrentConnectionConfig);
_Ado = reval;
reval.Context = this;
return reval;
}
return _Ado;
}
}
#endregion
#region Rewritable Methods
/// <summary>
/// Rewritable Methods
/// </summary>
public virtual IRewritableMethods RewritableMethods
{
get
{
if (base._RewritableMethods == null)
{
base._RewritableMethods = new RewritableMethods();
}
return _RewritableMethods;
}
set
{
base._RewritableMethods = value;
}
}
#endregion
#region Queryable
/// <summary>
/// Lambda Query operation
/// </summary>
public virtual ISugarQueryable<T> Queryable<T>() where T : class, new()
{
var reval = InstanceFactory.GetQueryable<T>(base.CurrentConnectionConfig);
reval.Context = this;
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig); ;
reval.SqlBuilder = sqlBuilder;
reval.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig);
reval.SqlBuilder.QueryBuilder.Builder = sqlBuilder;
reval.SqlBuilder.Context = reval.SqlBuilder.QueryBuilder.Context = this;
reval.SqlBuilder.QueryBuilder.EntityName = typeof(T).Name;
reval.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
return reval;
}
/// <summary>
/// Lambda Query operation
/// </summary>
public virtual ISugarQueryable<SugarDynamic> Queryable(string tableName, string shortName, string widthString = null)
{
var queryable = Queryable<SugarDynamic>();
queryable.SqlBuilder.QueryBuilder.EntityName = tableName;
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
queryable.SqlBuilder.QueryBuilder.TableWithString = widthString;
return queryable;
}
/// <summary>
/// Lambda Query operation
/// </summary>
public virtual ISugarQueryable<T> Queryable<T>(string shortName, string widthString = null) where T : class, new()
{
var queryable = Queryable<T>();
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
queryable.SqlBuilder.QueryBuilder.TableWithString = widthString;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2>(Expression<Func<T, T2, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3>(Expression<Func<T, T2, T3, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4>(Expression<Func<T, T2, T3, T4, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5>(Expression<Func<T, T2, T3, T4, T5, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6>(Expression<Func<T, T2, T3, T4, T5, T6, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7>(Expression<Func<T, T2, T3, T4, T5, T6, T7, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T10, object[]>> joinExpression) where T : class, new()
{
var queryable = Queryable<T>();
string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression, this, ref shortName, typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10));
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
#endregion
#region Insertable
public virtual IInsertable<T> Insertable<T>(params T[] insertObjs) where T : class, new()
{
var reval = new InsertableProvider<T>();
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig); ;
reval.Context = this;
reval.EntityInfo = this.EntityProvider.GetEntityInfo<T>();
reval.SqlBuilder = sqlBuilder;
reval.InsertObjs = insertObjs;
sqlBuilder.InsertBuilder =reval.InsertBuilder = InstanceFactory.GetInsertBuilder(base.CurrentConnectionConfig);
sqlBuilder.InsertBuilder.Builder = sqlBuilder;
sqlBuilder.Context = reval.SqlBuilder.InsertBuilder.Context = this;
reval.Init();
return reval;
}
#endregion
#region SqlQuery
public virtual List<T> SqlQuery<T>(string sql, object whereObj = null)
{
var dbPars = this.Database.GetParameters(whereObj);
var builder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig);
builder.SqlQueryBuilder.sql.Append(sql);
if (dbPars != null && dbPars.Any())
builder.SqlQueryBuilder.Parameters.AddRange(dbPars);
using (var dataReader = this.Database.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray()))
{
var reval = this.Database.DbBind.DataReaderToList<T>(typeof(T), dataReader, builder.SqlQueryBuilder.Fields);
if (this.CurrentConnectionConfig.IsAutoCloseConnection) this.Close();
builder.SqlQueryBuilder.Clear();
return reval;
}
}
#endregion
#region Entity Methods
public virtual EntityProvider EntityProvider
{
get
{
if (base._EntityProvider == null)
{
base._EntityProvider = new EntityProvider();
}
return _EntityProvider;
}
set
{
base._EntityProvider = value;
}
}
#endregion
#region Dispose OR Close
public virtual void Close()
{
if (this.Database != null)
{
this.Database.Close();
}
}
public virtual void Dispose()
{
if (this.Database != null)
{
this.Database.Dispose();
}
}
#endregion
}
}