diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 75a1f0c30..f60408715 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -392,6 +392,17 @@ namespace SqlSugar FieldValue = String.Join(",", ids), CSharpTypeName = navPkColumn?.UnderType?.Name })); + if (NavigationGlobalInstanceRegistry.IsAny()) + { + foreach (var item in list) + { + var firstObj = navObjectNamePropety.GetValue(item); + if (NavigationGlobalInstanceRegistry.IsNavigationInitializerCreated(firstObj)) + { + navObjectNamePropety.SetValue(item,null); + } + } + } if (list.Any()&&navObjectNamePropety.GetValue(list.First()) == null) { var sqlObj = GetWhereSql(db,navObjectNameColumnInfo.Navigat.Name); diff --git a/Src/Asp.NetCore2/SqlSugar/Entities/NavigationInitializer.cs b/Src/Asp.NetCore2/SqlSugar/Entities/NavigationInitializer.cs new file mode 100644 index 000000000..ea0e6ff48 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSugar/Entities/NavigationInitializer.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Dynamic; +using System.Reflection.Emit; +using System.Reflection; +using System.Text; + +namespace SqlSugar +{ + internal static class NavigationGlobalInstanceRegistry + { + private static readonly Dictionary _instances = new Dictionary(); + private static readonly object _lock = new object(); + + public static Dictionary Instances => _instances; + + public static bool IsAny() + { + return _instances?.Count>0; + } + public static bool IsNavigationInitializerCreated(object instance) + { + if (instance == null) + return false; + + Type type = instance.GetType(); + + lock (_lock) + { + return _instances.ContainsKey(type) && _instances[type] == instance; + } + } + + public static void RegisterInstance(Type type, object instance) + { + lock (_lock) + { + if (!_instances.ContainsKey(type)) + { + _instances[type] = instance; + } + } + } + } + + public class NavigationInitializer where T : new() + { + public static implicit operator T(NavigationInitializer initializer) + { + Type type = typeof(T); + + if (!NavigationGlobalInstanceRegistry.Instances.ContainsKey(type)) + { + T instance = new T(); + NavigationGlobalInstanceRegistry.RegisterInstance(type, instance); + } + + return (T)NavigationGlobalInstanceRegistry.Instances[type]; + } + } +}