mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 修复 3.2.689 WithTempQuery DTO 映射查询问题;#1441 #1436 #1434 #1433 #1431 #1429 #1427 #1425 #1417 #1413 #1412 #1319
This commit is contained in:
parent
da7bb7c74d
commit
dc4d70b325
Binary file not shown.
@ -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) =>
|
||||||
|
@ -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>
|
||||||
|
19
FreeSql.sln
19
FreeSql.sln
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user