mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
Merge pull request #1199 from xunapro/master
fix: 修复ManyToMany不会触发AsTable的bug
This commit is contained in:
commit
80e0ae0560
@ -48,7 +48,7 @@ namespace FreeSql.Internal
|
|||||||
if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
|
if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
|
||||||
return csname;
|
return csname;
|
||||||
}
|
}
|
||||||
public bool ReadAnonymousField(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select,
|
public bool ReadAnonymousField(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select,
|
||||||
BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
|
BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
|
||||||
{
|
{
|
||||||
void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp)
|
void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp)
|
||||||
@ -413,7 +413,7 @@ namespace FreeSql.Internal
|
|||||||
};
|
};
|
||||||
parent.Childs.Add(child);
|
parent.Childs.Add(child);
|
||||||
ReadAnonymousField(_tables, _tableRule, field, child, ref index, newExp.Arguments[a], select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false);
|
ReadAnonymousField(_tables, _tableRule, field, child, ref index, newExp.Arguments[a], select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false);
|
||||||
if (child.CsName == null)
|
if (child.CsName == null)
|
||||||
child.CsName = csname;
|
child.CsName = csname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1337,7 +1337,7 @@ namespace FreeSql.Internal
|
|||||||
fsqltables[0].Alias = $"tb_{fsqltables.Count}";
|
fsqltables[0].Alias = $"tb_{fsqltables.Count}";
|
||||||
fsqltables[0].Parameter = Expression.Parameter(asSelectEntityType, fsqltables[0].Alias);
|
fsqltables[0].Parameter = Expression.Parameter(asSelectEntityType, fsqltables[0].Alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type);
|
var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type);
|
||||||
var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true);
|
var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true);
|
||||||
if (parm123Ref != null)
|
if (parm123Ref != null)
|
||||||
@ -2352,6 +2352,7 @@ namespace FreeSql.Internal
|
|||||||
var mtmReftbname = e.FreeParse(Expression.MakeMemberAccess(memberExp.Expression, exp3Tb.Properties[exp3Tb.ColumnsByPosition[0].CsName]));
|
var mtmReftbname = e.FreeParse(Expression.MakeMemberAccess(memberExp.Expression, exp3Tb.Properties[exp3Tb.ColumnsByPosition[0].CsName]));
|
||||||
mtmReftbname = mtmReftbname.Substring(0, mtmReftbname.Length - commonExp._common.QuoteSqlName(exp3Tb.ColumnsByPosition[0].Attribute.Name).Length - 1);
|
mtmReftbname = mtmReftbname.Substring(0, mtmReftbname.Length - commonExp._common.QuoteSqlName(exp3Tb.ColumnsByPosition[0].Attribute.Name).Length - 1);
|
||||||
var midSelect = commonExp._common._orm.Select<object>().As($"M{select._tables[0].Alias}_M{mtmReftbname}").AsType(memberTbref.RefMiddleEntityType) as Select1Provider<object>;
|
var midSelect = commonExp._common._orm.Select<object>().As($"M{select._tables[0].Alias}_M{mtmReftbname}").AsType(memberTbref.RefMiddleEntityType) as Select1Provider<object>;
|
||||||
|
select._tableRules.ForEach(o => midSelect.AsTable(o));
|
||||||
switch (commonExp._ado.DataType)
|
switch (commonExp._ado.DataType)
|
||||||
{
|
{
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
@ -2383,7 +2384,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
var dbinfo = commonExp._common._orm.CodeFirst.GetDbInfo(memberTbref.Columns[0].CsType);
|
var dbinfo = commonExp._common._orm.CodeFirst.GetDbInfo(memberTbref.Columns[0].CsType);
|
||||||
select.Where($"{amtReftbname}.{commonExp._common.QuoteSqlName(memberTbref.Columns[0].Attribute.Name)} @> ARRAY[{select._tables[0].Alias}.{commonExp._common.QuoteSqlName(memberTbref.RefColumns[0].Attribute.Name)}]::{dbinfo?.dbtype}");
|
select.Where($"{amtReftbname}.{commonExp._common.QuoteSqlName(memberTbref.Columns[0].Attribute.Name)} @> ARRAY[{select._tables[0].Alias}.{commonExp._common.QuoteSqlName(memberTbref.RefColumns[0].Attribute.Name)}]::{dbinfo?.dbtype}");
|
||||||
}
|
}
|
||||||
else if (memberTbref.Columns[0] == exp3Tb.Primarys[0])
|
else if (memberTbref.Columns[0] == exp3Tb.Primarys[0])
|
||||||
{
|
{
|
||||||
var dbinfo = commonExp._common._orm.CodeFirst.GetDbInfo(memberTbref.RefColumns[0].CsType);
|
var dbinfo = commonExp._common._orm.CodeFirst.GetDbInfo(memberTbref.RefColumns[0].CsType);
|
||||||
@ -2599,7 +2600,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
throw throwCallExp(CoreStrings.Not_Support);
|
throw throwCallExp(CoreStrings.Not_Support);
|
||||||
}
|
}
|
||||||
Exception throwCallExp(string message) => new Exception(CoreStrings.Parsing_Failed(callExp.Method.Name,message));
|
Exception throwCallExp(string message) => new Exception(CoreStrings.Parsing_Failed(callExp.Method.Name, message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user