Subquery Mapping BUG

This commit is contained in:
sunkaixuan 2017-09-21 11:03:25 +08:00
parent 074b367248
commit 698c0c88de
5 changed files with 19 additions and 3 deletions

View File

@ -40,7 +40,6 @@ namespace OrmTest.Demo
private static void Subqueryable() private static void Subqueryable()
{ {
var db = GetInstance(); var db = GetInstance();
var getAll11 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Max(s=>s.Id)==1).ToList(); var getAll11 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Max(s=>s.Id)==1).ToList();
var getAll7 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Any()).ToList(); var getAll7 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Any()).ToList();

View File

@ -216,6 +216,13 @@ namespace SqlSugar
resolveExpress.MappingColumns = Context.MappingColumns; resolveExpress.MappingColumns = Context.MappingColumns;
resolveExpress.MappingTables = Context.MappingTables; resolveExpress.MappingTables = Context.MappingTables;
resolveExpress.IgnoreComumnList = Context.IgnoreColumns; resolveExpress.IgnoreComumnList = Context.IgnoreColumns;
resolveExpress.InitMappingInfo = this.Context.InitMppingInfo;
resolveExpress.RefreshMapping = () =>
{
resolveExpress.MappingColumns = Context.MappingColumns;
resolveExpress.MappingTables = Context.MappingTables;
resolveExpress.IgnoreComumnList = Context.IgnoreColumns;
};
resolveExpress.Resolve(expression, resolveType); resolveExpress.Resolve(expression, resolveType);
this.Parameters.AddRange(resolveExpress.Parameters); this.Parameters.AddRange(resolveExpress.Parameters);
var reval = resolveExpress.Result; var reval = resolveExpress.Result;

View File

@ -99,6 +99,8 @@ namespace SqlSugar
} }
public virtual string SqlTranslationLeft { get { return "["; } } public virtual string SqlTranslationLeft { get { return "["; } }
public virtual string SqlTranslationRight { get { return "]"; } } public virtual string SqlTranslationRight { get { return "]"; } }
public virtual Action<Type> InitMappingInfo { get; set; }
public virtual Action RefreshMapping { get; set; }
#endregion #endregion
#region Core methods #region Core methods
@ -143,7 +145,7 @@ namespace SqlSugar
else if (isMapping) else if (isMapping)
{ {
var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase)); var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase));
return SqlTranslationLeft + (mappingInfo == null ? entityName : mappingInfo.EntityName) + SqlTranslationRight; return SqlTranslationLeft + (mappingInfo == null ? entityName : mappingInfo.DbTableName) + SqlTranslationRight;
} }
else if (isComplex) else if (isComplex)
{ {

View File

@ -38,7 +38,13 @@ namespace SqlSugar
{ {
var exp = expression as MethodCallExpression; var exp = expression as MethodCallExpression;
var resType = exp.Method.ReturnType; var resType = exp.Method.ReturnType;
var name = resType.GetGenericArguments().First().Name; var entityType = resType.GetGenericArguments().First();
var name = entityType.Name;
if (this.Context.InitMappingInfo != null)
{
this.Context.InitMappingInfo(entityType);
this.Context.RefreshMapping();
}
return "FROM "+this.Context.GetTranslationTableName(name, true); return "FROM "+this.Context.GetTranslationTableName(name, true);
} }
} }

View File

@ -22,6 +22,8 @@ namespace SqlSugar
ExpressionResult Result { get; set; } ExpressionResult Result { get; set; }
string SqlParameterKeyWord { get; } string SqlParameterKeyWord { get; }
string SingleTableNameSubqueryShortName { get; set; } string SingleTableNameSubqueryShortName { get; set; }
Action<Type> InitMappingInfo { get; set; }
Action RefreshMapping { get; set; }
string GetAsString(string fieldName, string fieldValue); string GetAsString(string fieldName, string fieldValue);
void Resolve(Expression expression, ResolveExpressType resolveType); void Resolve(Expression expression, ResolveExpressType resolveType);