mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +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 class JoinConditionAttribute : Attribute
|
||||
{
|
||||
public string Condition { get; set; }
|
||||
public JoinConditionAttribute(string condition) => Condition = condition;
|
||||
}
|
||||
public class JoinTest01
|
||||
{
|
||||
public int id { get; set; }
|
||||
@ -382,8 +377,10 @@ namespace base_entity
|
||||
[Column(MapType = typeof(int))]
|
||||
public JoinTest01Enum JoinTest01Enum2 { get; set; }
|
||||
|
||||
[JoinCondition("a.parentcode = b.code")]
|
||||
[Navigate(nameof(parentcode), TempPrimary = nameof(JoinTest01.code))]
|
||||
public JoinTest01 Parent { get; set; }
|
||||
[Navigate(nameof(JoinTest01.parentcode), TempPrimary = nameof(code))]
|
||||
public List<JoinTest01> Childs { get; set; }
|
||||
}
|
||||
public enum JoinTest01Enum { f1, f2, f3 }
|
||||
|
||||
@ -572,6 +569,14 @@ namespace base_entity
|
||||
#endregion
|
||||
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))
|
||||
.AsTableImpl;
|
||||
|
||||
@ -899,53 +904,7 @@ namespace base_entity
|
||||
});
|
||||
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) =>
|
||||
|
@ -800,14 +800,5 @@
|
||||
<param name="that"></param>
|
||||
<returns></returns>
|
||||
</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>
|
||||
</doc>
|
||||
|
19
FreeSql.sln
19
FreeSql.sln
@ -119,6 +119,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Cust
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.QuestDb", "Providers\FreeSql.Provider.QuestDb\FreeSql.Provider.QuestDb.csproj", "{8A06B18A-A8BF-4AEA-AFE4-0F573C2DBFEE}"
|
||||
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
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
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|x86.ActiveCfg = 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
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -743,10 +757,11 @@ Global
|
||||
{D4FEE5C1-6805-4B46-B10B-BE5CC942B883} = {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}
|
||||
{71A6F937-D11B-4AE4-9933-BB6B4D925665} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
|
||||
RESX_PrefixTranslations = True
|
||||
RESX_NeutralResourcesLanguage = en-US
|
||||
RESX_PrefixTranslations = True
|
||||
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
@ -2514,7 +2514,8 @@ namespace FreeSql.Internal
|
||||
{
|
||||
if (tb == null || dtoProp == null || tb.Parameter == null) return null;
|
||||
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;
|
||||
|
||||
Expression LocalMatch(Type type, Expression memExp)
|
||||
|
@ -632,7 +632,7 @@ namespace FreeSql.Internal
|
||||
var propTypeIsObservableCollection = propElementType != null && pnv.PropertyType == typeof(ObservableCollection<>).MakeGenericType(propElementType);
|
||||
|
||||
#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;")
|
||||
.Append(" ").Append(propModification).Append(" override ").Append(propTypeName).Append(" ").Append(pnv.Name).AppendLine(" {");
|
||||
@ -768,7 +768,7 @@ namespace FreeSql.Internal
|
||||
nvref.RefType = TableRefType.OneToMany;
|
||||
trytb.AddOrUpdateTableRef(pnv.Name, nvref);
|
||||
}
|
||||
if (isLazy) LocalManyLazyLoadingCode(null, null, null, lmbdWhere.ToString());
|
||||
if (isLazy) LocalOneToManyLazyLoadingCode(null, null, null, lmbdWhere.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -802,6 +802,7 @@ namespace FreeSql.Internal
|
||||
}
|
||||
if (isLazy) LocalLazyLoadingCode(lmbdWhere.ToString());
|
||||
}
|
||||
return;
|
||||
}
|
||||
#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
|
||||
|
Loading…
x
Reference in New Issue
Block a user