diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 6818bf46..14783b73 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -123,6 +123,11 @@ 手工绑定 ManyToMany 导航关系 + + + 主键名 + + 数据库表名 diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 13725c82..39313640 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -708,12 +708,16 @@ namespace FreeSql.Internal.CommonProvider return; } - Dictionary>> dicList = new Dictionary>>(); + Dictionary>>> dicList = new Dictionary>>>(); foreach (var item in list) { if (tbref.Columns.Count == 1) { - dicList.Add(getListValue(item, tbref.Columns[0].CsName, 0).ToString(), Tuple.Create(item, new List())); + var dicListKey = getListValue(item, tbref.Columns[0].CsName, 0).ToString(); + var dicListVal = Tuple.Create(item, new List()); + if (dicList.TryGetValue(dicListKey, out var items) == false) + dicList.Add(dicListKey, items = new List>>()); + items.Add(dicListVal); } else { @@ -723,7 +727,11 @@ namespace FreeSql.Internal.CommonProvider if (z > 0) sb.Append("*$*"); sb.Append(getListValue(item, tbref.Columns[z].CsName, z)); } - dicList.Add(sb.ToString(), Tuple.Create(item, new List())); + var dicListKey = sb.ToString(); + var dicListVal = Tuple.Create(item, new List()); + if (dicList.TryGetValue(dicListKey, out var items) == false) + dicList.Add(dicListKey, items = new List>>()); + items.Add(dicListVal); sb.Clear(); } } @@ -756,15 +764,18 @@ namespace FreeSql.Internal.CommonProvider key = sb.ToString(); sb.Clear(); } - if (dicList.TryGetValue(key, out var t1item) == false) return; - t1item.Item2.Add(nav); + if (dicList.TryGetValue(key, out var t1items) == false) return; + foreach (var t1item in t1items) + t1item.Item2.Add(nav); //将子集合的,多对一,对象设置为当前对象 foreach (var parentNav in parentNavs) - _orm.SetEntityValueWithPropertyName(tbref.RefMiddleEntityType, nav, parentNav, t1item.Item1); + foreach (var t1item in t1items) + _orm.SetEntityValueWithPropertyName(tbref.RefMiddleEntityType, nav, parentNav, t1item.Item1); } - foreach (var t1item in dicList.Values) - setListValue(t1item.Item1, t1item.Item2); + foreach (var t1items in dicList.Values) + foreach (var t1item in t1items) + setListValue(t1item.Item1, t1item.Item2); dicList.Clear(); } break;