This commit is contained in:
28810
2019-01-14 14:15:46 +08:00
parent b92f480cda
commit ec6d482321
16 changed files with 212 additions and 44 deletions

View File

@ -2,10 +2,10 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.0.5</Version>
<Version>0.0.6</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>YeXiangQin</Authors>
<Description>打造 .NETCore 最方便的 ORMDbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL 数据库。</Description>
<Description>打造 .NETCore 最方便的 ORMDbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。</Description>
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
<PackageTags>FreeSql ORM</PackageTags>
</PropertyGroup>
@ -24,6 +24,7 @@
<PackageReference Include="SafeObjectPool" Version="1.0.12" />
<PackageReference Include="System.Data.SqlClient" Version="4.6.0" />
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.109.2" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
</ItemGroup>
</Project>

View File

@ -78,7 +78,7 @@ namespace FreeSql {
/// 监视数据库命令对象
/// </summary>
/// <param name="executing">执行前</param>
/// <param name="executed">执行后</param>
/// <param name="executed">执行后,可监视执行性能</param>
/// <returns></returns>
public FreeSqlBuilder UseMonitorCommand(Action<DbCommand> executing, Action<DbCommand, string> executed = null) {
_aopCommandExecuting = executing;

View File

@ -18,9 +18,13 @@ namespace FreeSql {
/// </summary>
List<ObjectPool<DbConnection>> SlavePools { get; }
/// <summary>
/// 是否跟踪记录SQL执行性能日志
/// 监视数据库命令对象(执行前,调试)
/// </summary>
bool IsTracePerformance { get; set; }
Action<DbCommand> AopCommandExecuting { get; set; }
/// <summary>
/// 监视数据库命令对象(执行后,用于监视执行性能)
/// </summary>
Action<DbCommand, string> AopCommandExecuted { get; set; }
#region
/// <summary>

View File

@ -4,6 +4,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Linq;
using System.Text;
@ -13,10 +14,10 @@ namespace FreeSql.Internal.CommonProvider {
protected abstract void ReturnConnection(ObjectPool<DbConnection> pool, Object<DbConnection> conn, Exception ex);
protected abstract DbCommand CreateCommand();
protected abstract DbParameter[] GetDbParamtersByObject(string sql, object obj);
internal Action<DbCommand> AopCommandExecuting = null;
internal Action<DbCommand, string> AopCommandExecuted = null;
public Action<DbCommand> AopCommandExecuting { get; set; }
public Action<DbCommand, string> AopCommandExecuted { get; set; }
public bool IsTracePerformance { get; set; } = string.Compare(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"), "Development", true) == 0;
protected bool IsTracePerformance => AopCommandExecuted != null;
public ObjectPool<DbConnection> MasterPool { get; protected set; }
public List<ObjectPool<DbConnection>> SlavePools { get; } = new List<ObjectPool<DbConnection>>();
@ -64,19 +65,15 @@ namespace FreeSql.Internal.CommonProvider {
public List<T> Query<T>(string sql, object parms = null) => Query<T>(CommandType.Text, sql, GetDbParamtersByObject(sql, parms));
public List<T> Query<T>(CommandType cmdType, string cmdText, params DbParameter[] cmdParms) {
var names = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
var ds = new List<object[]>();
var ret = new List<T>();
ExecuteReader(dr => {
if (names.Any() == false)
for (var a = 0; a < dr.FieldCount; a++) names.Add(dr.GetName(a), a);
object[] values = new object[dr.FieldCount];
dr.GetValues(values);
ds.Add(values);
var read = Utils.ExecuteArrayRowReadClassOrTuple(typeof(T), names, values, 0);
ret.Add(read.value == null ? default(T) : (T)read.value);
}, cmdType, cmdText, cmdParms);
var ret = new List<T>();
foreach (var row in ds) {
var read = Utils.ExecuteArrayRowReadClassOrTuple(typeof(T), names, row);
ret.Add(read.value == null ? default(T) : (T) read.value);
}
return ret;
}
public void ExecuteReader(Action<DbDataReader> readerHander, string sql, object parms = null) => ExecuteReader(readerHander, CommandType.Text, sql, GetDbParamtersByObject(sql, parms));

View File

@ -191,7 +191,7 @@ namespace FreeSql.Internal {
dynamic expando = new System.Dynamic.ExpandoObject(); //动态类型字段 可读可写
var expandodic = (IDictionary<string, object>)expando;
foreach (var name in names)
expandodic[Utils.GetCsName(name.Key)] = row[name.Value];
expandodic.Add(name.Key, row[name.Value]);
return (expando, names.Count);
}
//类注入属性