Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 19 additions & 14 deletions Kogel.Dapper.Extension/Core/Interfaces/ICommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,36 @@ namespace Kogel.Dapper.Extension.Core.Interfaces
{
public interface ICommand<T>
{
int Update(T entity, string[] excludeFields = null);
int Insert(T entity, string[] excludeFields = null);

int Update(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);
Task<int> InsertAsync(T entity, string[] excludeFields = null);

Task<int> UpdateAsync(T entity);
int Insert(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);

int Update(Expression<Func<T, T>> updateExpression);
Task<int> InsertAsync(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);

Task<int> UpdateAsync(Expression<Func<T, T>> updateExpression);
int InsertIdentity(T entity, string[] excludeFields = null);

int Delete();
Task<int> InsertIdentityAsync(T entity, string[] excludeFields = null);

Task<int> DeleteAsync();

int Insert(T entity, string[] excludeFields = null);
int Update(T entity, string[] excludeFields = null);

Task<int> InsertAsync(T entity, string[] excludeFields = null);
Task<int> UpdateAsync(T entity, string[] excludeFields = null);

int InsertIdentity(T entity, string[] excludeFields = null);
int Update(Expression<Func<T, T>> updateExpression);

int Insert(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);
Task<int> UpdateAsync(Expression<Func<T, T>> updateExpression);

Task<int> InsertAsync(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);
int Update(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);

Task<int> UpdateAsync(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120);

int Delete();
Task<int> DeleteAsync();

int Delete(T model);
int Delete(T model);
Task<int> DeleteAsync(T model);

}
}
}
41 changes: 22 additions & 19 deletions Kogel.Dapper.Extension/Core/Interfaces/IQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,40 +9,43 @@ namespace Kogel.Dapper.Extension.Core.Interfaces
{
public interface IQuery<T>
{
T Get();
T Get();

TReturn Get<TReturn>(Expression<Func<T, TReturn>> select);
Task<T> GetAsync();

TReturn Get<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);
TReturn Get<TReturn>(Expression<Func<T, TReturn>> select);

Task<T> GetAsync();
TReturn Get<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);

IEnumerable<T> ToIEnumerable();

IEnumerable<TReturn> ToIEnumerable<TReturn>(Expression<Func<T, TReturn>> select);
IEnumerable<T> ToIEnumerable();

IEnumerable<TReturn> ToIEnumerable<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);
Task<IEnumerable<T>> ToIEnumerableAsync();

Task<IEnumerable<T>> ToIEnumerableAsync();
IEnumerable<TReturn> ToIEnumerable<TReturn>(Expression<Func<T, TReturn>> select);

List<T> ToList();
IEnumerable<TReturn> ToIEnumerable<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);

List<TReturn> ToList<TReturn>(Expression<Func<T, TReturn>> select);

List<TReturn> ToList<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);
List<T> ToList();
Task<List<T>> ToListAsync();

Task<List<T>> ToListAsync();
List<TReturn> ToList<TReturn>(Expression<Func<T, TReturn>> select);

PageList<T> PageList(int pageIndex, int pageSize);
List<TReturn> ToList<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);

PageList<TReturn> PageList<TReturn>(int pageIndex, int pageSize, Expression<Func<T, TReturn>> select);

PageList<TReturn> PageList<TReturn>(int pageIndex, int pageSize, bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);
PageList<T> PageList(int pageIndex, int pageSize);

DataSet ToDataSet(IDbDataAdapter dataAdapter = null);
PageList<TReturn> PageList<TReturn>(int pageIndex, int pageSize, Expression<Func<T, TReturn>> select);

DataSet ToDataSet<TReturn>(Expression<Func<T, TReturn>> select, IDbDataAdapter dataAdapter = null);
PageList<TReturn> PageList<TReturn>(int pageIndex, int pageSize, bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect);

DataSet ToDataSet<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect, IDbDataAdapter dataAdapter = null);
}

DataSet ToDataSet(IDbDataAdapter dataAdapter = null);

DataSet ToDataSet<TReturn>(Expression<Func<T, TReturn>> select, IDbDataAdapter dataAdapter = null);

DataSet ToDataSet<TReturn>(bool where, Expression<Func<T, TReturn>> trueSelect, Expression<Func<T, TReturn>> falseSelect, IDbDataAdapter dataAdapter = null);
}
}
134 changes: 82 additions & 52 deletions Kogel.Dapper.Extension/Core/SetC/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ namespace Kogel.Dapper.Extension.Core.SetC
/// <typeparam name="T"></typeparam>
public abstract class Command<T> : AbstractSet, ICommand<T>
{



public readonly IDbConnection DbCon;
public readonly IDbTransaction DbTransaction;

Expand All @@ -35,25 +36,53 @@ protected Command(IDbConnection conn, SqlProvider sqlProvider, IDbTransaction db
DbTransaction = dbTransaction;
}

public int Update(T entity, string[] excludeFields = null)
public int Insert(T entity, string[]excludeFields = null)
{
SqlProvider.FormatUpdate(entity, excludeFields);
SqlProvider.FormatInsert(entity, excludeFields);
return DbCon.Execute(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}

public int Update(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120)
{
SqlProvider.FormatUpdate(entities.FirstOrDefault(), excludeFields, true);
//批量修改不需要别名(暂时有点小bug,先勉强使用下)
SqlProvider.SqlString = SqlProvider.SqlString.Replace("Update_", "").Replace("_0","").Replace("_1", "");
var identity = EntityCache.QueryEntity(typeof(T)).Identitys;
SqlProvider.SqlString += $" AND {identity}={SqlProvider.ProviderOption.ParameterPrefix + identity}";
return DbCon.Execute(SqlProvider.SqlString, entities, DbTransaction, timeout);
}
public async Task<int> InsertAsync(T entity, string[]excludeFields = null)
{
SqlProvider.FormatInsert(entity, excludeFields);
return await DbCon.ExecuteAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}

public async Task<int> UpdateAsync(T entity)
public int Insert(IEnumerable<T> entities, string[]excludeFields = null, int timeout = 120)
{
SqlProvider.FormatUpdate(entity, null);
SqlProvider.FormatInsert(entities.FirstOrDefault(), excludeFields);
return DbCon.Execute(SqlProvider.SqlString, entities, DbTransaction, timeout);
}

public async Task<int> InsertAsync(IEnumerable<T> entities, string[]excludeFields = null, int timeout = 120)
{
SqlProvider.FormatInsert(entities.FirstOrDefault(), excludeFields);
return await DbCon.ExecuteAsync(SqlProvider.SqlString, entities, DbTransaction, timeout);
}

public int InsertIdentity(T entity, string[]excludeFields = null)
{
SqlProvider.FormatInsertIdentity(entity, excludeFields);
object result = DbCon.ExecuteScalar(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
return result != null ? Convert.ToInt32(result) : 0;
}

public async Task<int> InsertIdentityAsync(T entity, string[]excludeFields = null)
{
SqlProvider.FormatInsertIdentity(entity, excludeFields);
object result = await DbCon.ExecuteScalarAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
return result != null ? Convert.ToInt32(result) : 0;
}

public int Update(T entity, string[]excludeFields = null)
{
SqlProvider.FormatUpdate(entity, excludeFields);
return DbCon.Execute(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}

public async Task<int> UpdateAsync(T entity, string[]excludeFields = null)
{
SqlProvider.FormatUpdate(entity, excludeFields);
return await DbCon.ExecuteAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}

Expand All @@ -69,61 +98,62 @@ public async Task<int> UpdateAsync(Expression<Func<T, T>> updateExpression)
return await DbCon.ExecuteAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}

public int Delete()
private void PreUpdate(IEnumerable<T> entities, string[]excludeFields = null)
{
SqlProvider.FormatDelete();
return DbCon.Execute(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
SqlProvider.FormatUpdate(entities.FirstOrDefault(), excludeFields, true);
//批量修改不需要别名(暂时有点小bug,先勉强使用下)
SqlProvider.SqlString = SqlProvider.SqlString.Replace("Update_", "").Replace("_0", "").Replace("_1", "");
var identity = EntityCache.QueryEntity(typeof(T)).Identitys;
SqlProvider.SqlString += $" AND {identity}={SqlProvider.ProviderOption.ParameterPrefix + identity}";
}

public async Task<int> DeleteAsync()
public int Update(IEnumerable<T> entities, string[]excludeFields = null, int timeout = 120)
{
SqlProvider.FormatDelete();
return await DbCon.ExecuteAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
PreUpdate(entities, excludeFields);
return DbCon.Execute(SqlProvider.SqlString, entities, DbTransaction, timeout);
}

public int Insert(T entity, string[] excludeFields = null)
public Task<int> UpdateAsync(IEnumerable<T> entities, string[]excludeFields = null, int timeout = 120)
{
SqlProvider.FormatInsert(entity, excludeFields);
return DbCon.Execute(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
throw new NotImplementedException();
}

public async Task<int> InsertAsync(T entity, string[] excludeFields = null)
private (string, DynamicParameters) PreDelete(T model)
{
SqlProvider.FormatInsert(entity, excludeFields);
return await DbCon.ExecuteAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
SqlProvider.FormatDelete();
var entityObject = EntityCache.QueryEntity(model.GetType());
var identity = entityObject.EntityFieldList.FirstOrDefault(x => x.IsIdentity);
if (identity == null)
throw new System.Exception("主键不存在!");
//设置参数
DynamicParameters param = new DynamicParameters();
param.Add(entityObject.Identitys, identity.PropertyInfo.GetValue(model));
return ($@"{SqlProvider.SqlString} AND {entityObject.Identitys}={SqlProvider.ProviderOption.ParameterPrefix}{entityObject.Identitys}",
param);
}

public int InsertIdentity(T entity, string[] excludeFields = null)
public int Delete(T model)
{
SqlProvider.FormatInsertIdentity(entity, excludeFields);
object result= DbCon.ExecuteScalar(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
return result != null ? Convert.ToInt32(result) : 0;
(string sql, DynamicParameters param) = PreDelete(model);
return DbCon.Execute(sql, param);
}

public int Insert(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120)
{
SqlProvider.FormatInsert(entities.FirstOrDefault(), excludeFields);
return DbCon.Execute(SqlProvider.SqlString, entities, DbTransaction, timeout);
}
public Task<int> DeleteAsync(T model)
{
(string sql, DynamicParameters param) = PreDelete(model);
return DbCon.ExecuteAsync(sql, param);
}

public async Task<int> InsertAsync(IEnumerable<T> entities, string[] excludeFields = null, int timeout = 120)
public int Delete()
{
SqlProvider.FormatInsert(entities.FirstOrDefault(), excludeFields);
return await DbCon.ExecuteAsync(SqlProvider.SqlString, entities, DbTransaction, timeout);
SqlProvider.FormatDelete();
return DbCon.Execute(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}

public int Delete(T model)
{
SqlProvider.FormatDelete();
var entityObject = EntityCache.QueryEntity(model.GetType());
var identity = entityObject.EntityFieldList.FirstOrDefault(x => x.IsIdentity);
if (identity == null)
throw new System.Exception("主键不存在!");
//设置参数
DynamicParameters param = new DynamicParameters();
param.Add(entityObject.Identitys, identity.PropertyInfo.GetValue(model));
return DbCon.Execute($@"{SqlProvider.SqlString} AND {entityObject.Identitys}={SqlProvider.ProviderOption.ParameterPrefix}{entityObject.Identitys}
", param);
}
}
public async Task<int> DeleteAsync()
{
SqlProvider.FormatDelete();
return await DbCon.ExecuteAsync(SqlProvider.SqlString, SqlProvider.Params, DbTransaction);
}
}
}
Loading