mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
微调
This commit is contained in:
parent
69909fdb8a
commit
37aa5c613c
@ -252,7 +252,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
return _orm.Cache.Shell(_cache.key, _cache.seconds, () => {
|
return _orm.Cache.Shell(_cache.key, _cache.seconds, () => {
|
||||||
List<T1> ret = new List<T1>();
|
List<T1> ret = new List<T1>();
|
||||||
_orm.Ado.ExecuteReader(_transaction, dr => {
|
_orm.Ado.ExecuteReader(_transaction, dr => {
|
||||||
ret.Add(af.Read(dr));
|
ret.Add(af.Read(_orm, dr));
|
||||||
}, CommandType.Text, sql, _params.ToArray());
|
}, CommandType.Text, sql, _params.ToArray());
|
||||||
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
|
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
|
||||||
_trackToList?.Invoke(ret);
|
_trackToList?.Invoke(ret);
|
||||||
@ -267,7 +267,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
return await _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => {
|
return await _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => {
|
||||||
List<T1> ret = new List<T1>();
|
List<T1> ret = new List<T1>();
|
||||||
await _orm.Ado.ExecuteReaderAsync(_transaction, dr => {
|
await _orm.Ado.ExecuteReaderAsync(_transaction, dr => {
|
||||||
ret.Add(af.Read(dr));
|
ret.Add(af.Read(_orm, dr));
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}, CommandType.Text, sql, _params.ToArray());
|
}, CommandType.Text, sql, _params.ToArray());
|
||||||
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
|
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
|
||||||
@ -332,7 +332,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
static ConcurrentDictionary<string, GetAllFieldExpressionTreeInfo> _dicGetAllFieldExpressionTree = new ConcurrentDictionary<string, GetAllFieldExpressionTreeInfo>();
|
static ConcurrentDictionary<string, GetAllFieldExpressionTreeInfo> _dicGetAllFieldExpressionTree = new ConcurrentDictionary<string, GetAllFieldExpressionTreeInfo>();
|
||||||
public class GetAllFieldExpressionTreeInfo {
|
public class GetAllFieldExpressionTreeInfo {
|
||||||
public string Field { get; set; }
|
public string Field { get; set; }
|
||||||
public Func<DbDataReader, T1> Read { get; set; }
|
public Func<IFreeSql, DbDataReader, T1> Read { get; set; }
|
||||||
}
|
}
|
||||||
protected GetAllFieldExpressionTreeInfo GetAllFieldExpressionTree() {
|
protected GetAllFieldExpressionTreeInfo GetAllFieldExpressionTree() {
|
||||||
return _dicGetAllFieldExpressionTree.GetOrAdd(string.Join("+", _tables.Select(a => $"{_orm.Ado.DataType}-{a.Table.DbName}-{a.Alias}-{a.Type}")), s => {
|
return _dicGetAllFieldExpressionTree.GetOrAdd(string.Join("+", _tables.Select(a => $"{_orm.Ado.DataType}-{a.Table.DbName}-{a.Alias}-{a.Type}")), s => {
|
||||||
@ -340,6 +340,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
var type = tb1.TypeLazy ?? tb1.Type;
|
var type = tb1.TypeLazy ?? tb1.Type;
|
||||||
var props = tb1.Properties;
|
var props = tb1.Properties;
|
||||||
|
|
||||||
|
var ormExp = Expression.Parameter(typeof(IFreeSql), "orm");
|
||||||
var rowExp = Expression.Parameter(typeof(DbDataReader), "row");
|
var rowExp = Expression.Parameter(typeof(DbDataReader), "row");
|
||||||
var returnTarget = Expression.Label(type);
|
var returnTarget = Expression.Label(type);
|
||||||
var retExp = Expression.Variable(type, "ret");
|
var retExp = Expression.Variable(type, "ret");
|
||||||
@ -435,7 +436,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
blockExp.Add(
|
blockExp.Add(
|
||||||
Expression.IfThen(
|
Expression.IfThen(
|
||||||
Expression.NotEqual(readExpValue, Expression.Constant(null)),
|
Expression.NotEqual(readExpValue, Expression.Constant(null)),
|
||||||
Expression.Call(retExp, tb1.TypeLazySetOrm, Expression.Constant(_orm))
|
Expression.Call(retExp, tb1.TypeLazySetOrm, ormExp)
|
||||||
)
|
)
|
||||||
); //将 orm 传递给 lazy
|
); //将 orm 传递给 lazy
|
||||||
blockExp.AddRange(new Expression[] {
|
blockExp.AddRange(new Expression[] {
|
||||||
@ -444,7 +445,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
});
|
});
|
||||||
return new GetAllFieldExpressionTreeInfo {
|
return new GetAllFieldExpressionTreeInfo {
|
||||||
Field = field.ToString(),
|
Field = field.ToString(),
|
||||||
Read = Expression.Lambda<Func<DbDataReader, T1>>(Expression.Block(new[] { retExp, dataIndexExp, readExp }, blockExp), new[] { rowExp }).Compile()
|
Read = Expression.Lambda<Func<IFreeSql, DbDataReader, T1>>(Expression.Block(new[] { retExp, dataIndexExp, readExp }, blockExp), new[] { ormExp, rowExp }).Compile()
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user