async Queryable.Mapper bug

This commit is contained in:
610262374@qq.com 2019-01-10 13:50:19 +08:00
parent 3a03456593
commit 326cffa0bc
3 changed files with 10 additions and 41 deletions

View File

@ -12,51 +12,16 @@ namespace OrmTest.Demo
{
var db = GetInstance();
//auto fill ViewModelStudent3
var s11 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.Select<ViewModelStudent3>().ToList();
var s12 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select<ViewModelStudent3>()
.Mapper((it, cache) =>
{
var allSchools = cache.GetListByPrimaryKeys<School>(vmodel => vmodel.SchoolId);
//sql select shool where id (inViewModelStudent3[0].SchoolId , ViewModelStudent3[1].SchoolId...
//Equal to allSchools
//var allSchools2= cache.Get(list =>
// {
// var ids=list.Select(i => it.SchoolId).ToList();
// return db.Queryable<School>().In(ids).ToList();
//});Complex writing metho
/*one to one*/
//Good performance
it.School = allSchools.FirstOrDefault(i => i.Id == it.SchoolId);
//Poor performance.
//it.School = db.Queryable<School>().InSingle(it.SchoolId);
/*one to many*/
it.Schools = allSchools.Where(i => i.Id == it.SchoolId).ToList();
/*C# syntax conversion*/
it.Name = it.Name == null ? "null" : it.Name;
}).ToList();
var s13 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select<ViewModelStudent3>()
var x = db.Queryable<Student>()
.Mapper((it, cache) =>
{
it.Schools = db.Queryable<School>().Where(i => i.Id == it.SchoolId).ToList();
}).ToList();
it.Name = "xx";
}).ToListAsync();
x .Wait();
}

View File

@ -1298,6 +1298,10 @@ namespace SqlSugar
var asyncContext = this.Context.Utilities.CopyContext(true);
asyncContext.CurrentConnectionConfig.IsAutoCloseConnection = true;
var asyncQueryable = asyncContext.Queryable<ExpandoObject>().Select<T>(string.Empty).WithCacheIF(IsCache, CacheTime);
if (this.MapperAction != null)
asyncQueryable.Mapper(MapperAction);
if (this.MapperActionWithCache != null)
asyncQueryable.Mapper(MapperActionWithCache);
CopyQueryBuilder(asyncQueryable.QueryBuilder); return asyncQueryable;
}