- 修复 3.2.689 WithTempQuery DTO 映射查询问题;#1441 #1436 #1434 #1433 #1431 #1429 #1427 #1425 #1417 #1413 #1412 #1319

This commit is contained in:
2881099 2023-03-02 16:37:22 +08:00
parent da7bb7c74d
commit dc4d70b325
6 changed files with 35 additions and 68 deletions

View File

@ -366,11 +366,6 @@ namespace base_entity
public int aa { get; set; } public int aa { get; set; }
} }
public class JoinConditionAttribute : Attribute
{
public string Condition { get; set; }
public JoinConditionAttribute(string condition) => Condition = condition;
}
public class JoinTest01 public class JoinTest01
{ {
public int id { get; set; } public int id { get; set; }
@ -382,8 +377,10 @@ namespace base_entity
[Column(MapType = typeof(int))] [Column(MapType = typeof(int))]
public JoinTest01Enum JoinTest01Enum2 { get; set; } public JoinTest01Enum JoinTest01Enum2 { get; set; }
[JoinCondition("a.parentcode = b.code")] [Navigate(nameof(parentcode), TempPrimary = nameof(JoinTest01.code))]
public JoinTest01 Parent { get; set; } public JoinTest01 Parent { get; set; }
[Navigate(nameof(JoinTest01.parentcode), TempPrimary = nameof(code))]
public List<JoinTest01> Childs { get; set; }
} }
public enum JoinTest01Enum { f1, f2, f3 } public enum JoinTest01Enum { f1, f2, f3 }
@ -572,6 +569,14 @@ namespace base_entity
#endregion #endregion
fsql.UseJsonMap(); fsql.UseJsonMap();
var joinsql1 = fsql.Select<JoinTest01>()
.Include(a => a.Parent.Parent)
.Where(a => a.Parent.Parent.code == "001")
.Where(a => a.JoinTest01Enum == JoinTest01Enum.f3.ToString())
.Where(a => object.Equals(a.JoinTest01Enum, JoinTest01Enum.f3))
.Where(a => new[] { JoinTest01Enum.f2, JoinTest01Enum.f3 }.Contains(a.JoinTest01Enum2))
.ToSql();
var atimpl = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog)) var atimpl = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog))
.AsTableImpl; .AsTableImpl;
@ -899,53 +904,7 @@ namespace base_entity
}); });
var sqldel4 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); var sqldel4 = fsql.DeleteDict(diclist).AsTable("table1").ToSql();
fsql.Aop.ParseExpression += (_, e) =>
{
if (e.Expression is MemberExpression memExp == false) return;
ParameterExpression parmExp = null;
var exps = new List<MemberExpression>();
exps.Add(memExp);
while (memExp.Expression != null)
{
if (memExp.Expression is MemberExpression parentExp)
{
exps.Add(parentExp);
memExp = parentExp;
if (fsql.CodeFirst.GetTableByEntity(memExp.Type) == null) return;
continue;
}
if (memExp.Expression is ParameterExpression parmExp2)
{
parmExp = parmExp2;
break;
}
return;
}
if (parmExp == null) return;
if (e.Tables == null) return;
var oldTables = e.Tables.ToArray();
var result = e.FreeParse(e.Expression);
for (var a = oldTables.Length; a < e.Tables.Count; a++)
{
if (string.IsNullOrEmpty(e.Tables[a].NavigateCondition) == false) continue;
var parentTableAlias = e.Tables[a].Alias?.Split(new[] { "__" }, StringSplitOptions.None);
if (parentTableAlias == null || parentTableAlias.Length <= 1) continue;
var parentTable = e.Tables.Where(c => c.Alias == string.Join("__", parentTableAlias.Take(parentTableAlias.Length - 1))).FirstOrDefault();
if (parentTable == null || parentTable.Table.Properties.TryGetValue(parentTableAlias.Last(), out var navProp) == false) continue;
var joinAttr = navProp.GetCustomAttribute<JoinConditionAttribute>();
if (joinAttr == null) continue;
e.Tables[a].NavigateCondition = joinAttr.Condition
.Replace("a.", e.Tables[a].Alias + ".")
.Replace("b.", parentTable.Alias + ".");
}
};
var joinsql1 = fsql.Select<JoinTest01>()
.Include(a => a.Parent.Parent)
.Where(a => a.Parent.Parent.code == "001")
.Where(a => a.JoinTest01Enum == JoinTest01Enum.f3.ToString())
.Where(a => object.Equals(a.JoinTest01Enum, JoinTest01Enum.f3))
.Where(a => new[] { JoinTest01Enum.f2, JoinTest01Enum.f3 }.Contains(a.JoinTest01Enum2))
.ToSql();
fsql.Aop.ConfigEntity += (_, e) => fsql.Aop.ConfigEntity += (_, e) =>

View File

@ -800,14 +800,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -119,6 +119,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Cust
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.QuestDb", "Providers\FreeSql.Provider.QuestDb\FreeSql.Provider.QuestDb.csproj", "{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.QuestDb", "Providers\FreeSql.Provider.QuestDb\FreeSql.Provider.QuestDb.csproj", "{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.AggregateRoot", "Extensions\FreeSql.Extensions.AggregateRoot\FreeSql.Extensions.AggregateRoot.csproj", "{71A6F937-D11B-4AE4-9933-BB6B4D925665}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -705,6 +707,18 @@ Global
{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}.Release|x64.Build.0 = Release|Any CPU {8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}.Release|x64.Build.0 = Release|Any CPU
{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}.Release|x86.ActiveCfg = Release|Any CPU {8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}.Release|x86.ActiveCfg = Release|Any CPU
{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}.Release|x86.Build.0 = Release|Any CPU {8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}.Release|x86.Build.0 = Release|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Debug|x64.ActiveCfg = Debug|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Debug|x64.Build.0 = Debug|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Debug|x86.ActiveCfg = Debug|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Debug|x86.Build.0 = Debug|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Release|Any CPU.Build.0 = Release|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Release|x64.ActiveCfg = Release|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Release|x64.Build.0 = Release|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Release|x86.ActiveCfg = Release|Any CPU
{71A6F937-D11B-4AE4-9933-BB6B4D925665}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -743,10 +757,11 @@ Global
{D4FEE5C1-6805-4B46-B10B-BE5CC942B883} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {D4FEE5C1-6805-4B46-B10B-BE5CC942B883} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{ECF7FC70-A7FC-4FC3-9BF7-462EA0A65F9C} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {ECF7FC70-A7FC-4FC3-9BF7-462EA0A65F9C} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{71A6F937-D11B-4AE4-9933-BB6B4D925665} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
RESX_PrefixTranslations = True
RESX_NeutralResourcesLanguage = en-US RESX_NeutralResourcesLanguage = en-US
RESX_PrefixTranslations = True
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -2514,7 +2514,8 @@ namespace FreeSql.Internal
{ {
if (tb == null || dtoProp == null || tb.Parameter == null) return null; if (tb == null || dtoProp == null || tb.Parameter == null) return null;
var retList = new List<Expression[]>(); var retList = new List<Expression[]>();
LocalMatch(tb.Parameter.Type, tb.Parameter); var retExp = LocalMatch(tb.Parameter.Type, tb.Parameter);
if (retList.Any() == false) retList.Add(new[] { retExp });
return retList; return retList;
Expression LocalMatch(Type type, Expression memExp) Expression LocalMatch(Type type, Expression memExp)

View File

@ -632,7 +632,7 @@ namespace FreeSql.Internal
var propTypeIsObservableCollection = propElementType != null && pnv.PropertyType == typeof(ObservableCollection<>).MakeGenericType(propElementType); var propTypeIsObservableCollection = propElementType != null && pnv.PropertyType == typeof(ObservableCollection<>).MakeGenericType(propElementType);
#region islazy #region islazy
void LocalManyLazyLoadingCode(PropertyInfo refprop, string cscodeExtLogic1, string cscodeExtLogic2, string lmbdWhere) void LocalOneToManyLazyLoadingCode(PropertyInfo refprop, string cscodeExtLogic1, string cscodeExtLogic2, string lmbdWhere)
{ {
cscode.Append(" private bool __lazy__").Append(pnv.Name).AppendLine(" = false;") cscode.Append(" private bool __lazy__").Append(pnv.Name).AppendLine(" = false;")
.Append(" ").Append(propModification).Append(" override ").Append(propTypeName).Append(" ").Append(pnv.Name).AppendLine(" {"); .Append(" ").Append(propModification).Append(" override ").Append(propTypeName).Append(" ").Append(pnv.Name).AppendLine(" {");
@ -768,7 +768,7 @@ namespace FreeSql.Internal
nvref.RefType = TableRefType.OneToMany; nvref.RefType = TableRefType.OneToMany;
trytb.AddOrUpdateTableRef(pnv.Name, nvref); trytb.AddOrUpdateTableRef(pnv.Name, nvref);
} }
if (isLazy) LocalManyLazyLoadingCode(null, null, null, lmbdWhere.ToString()); if (isLazy) LocalOneToManyLazyLoadingCode(null, null, null, lmbdWhere.ToString());
} }
else else
{ {
@ -802,6 +802,7 @@ namespace FreeSql.Internal
} }
if (isLazy) LocalLazyLoadingCode(lmbdWhere.ToString()); if (isLazy) LocalLazyLoadingCode(lmbdWhere.ToString());
} }
return;
} }
#endregion #endregion
@ -1401,7 +1402,7 @@ namespace FreeSql.Internal
} }
} }
if (isLazy) LocalManyLazyLoadingCode(refprop, cscodeExtLogic1, cscodeExtLogic2, lmbdWhere.ToString()); if (isLazy) LocalOneToManyLazyLoadingCode(refprop, cscodeExtLogic1, cscodeExtLogic2, lmbdWhere.ToString());
} }
} }
else else