mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	add PgArrayToMany IncludeMany test2 #1147
This commit is contained in:
		@@ -58,9 +58,35 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
            };
 | 
					            };
 | 
				
			||||||
            Assert.Equal(6, fsql.Insert(users).ExecuteAffrows());
 | 
					            Assert.Equal(6, fsql.Insert(users).ExecuteAffrows());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var roles3 = fsql.Select<RoleLazyLoading>().IncludeMany(a => a.Users).ToList();
 | 
					            var users3 = fsql.Select<UserLazyLoading>().IncludeMany(a => a.Roles).ToList();
 | 
				
			||||||
            Assert.Equal(3, roles3.Count);
 | 
					            Assert.Equal(6, users3.Count);
 | 
				
			||||||
            var roles2 = roles3;
 | 
					            var users2 = users3;
 | 
				
			||||||
 | 
					            Assert.Equal(11, users2[0].UserId);
 | 
				
			||||||
 | 
					            Assert.Equal(12, users2[1].UserId);
 | 
				
			||||||
 | 
					            Assert.Equal(13, users2[2].UserId);
 | 
				
			||||||
 | 
					            Assert.Equal(14, users2[3].UserId);
 | 
				
			||||||
 | 
					            Assert.Equal(15, users2[4].UserId);
 | 
				
			||||||
 | 
					            Assert.Equal(16, users2[5].UserId);
 | 
				
			||||||
 | 
					            Assert.Equal("user1", users2[0].UserName);
 | 
				
			||||||
 | 
					            Assert.Equal("user2", users2[1].UserName);
 | 
				
			||||||
 | 
					            Assert.Equal("user3", users2[2].UserName);
 | 
				
			||||||
 | 
					            Assert.Equal("user4", users2[3].UserName);
 | 
				
			||||||
 | 
					            Assert.Equal("user5", users2[4].UserName);
 | 
				
			||||||
 | 
					            Assert.Equal("user6", users2[5].UserName);
 | 
				
			||||||
 | 
					            Assert.Equal("1,2", string.Join(",", users2[0].RoleIds));
 | 
				
			||||||
 | 
					            Assert.Equal("1,2,3", string.Join(",", users2[1].RoleIds));
 | 
				
			||||||
 | 
					            Assert.Equal("1,3", string.Join(",", users2[2].RoleIds));
 | 
				
			||||||
 | 
					            Assert.Equal("3,2,1", string.Join(",", users2[3].RoleIds));
 | 
				
			||||||
 | 
					            Assert.Null(users2[4].RoleIds);
 | 
				
			||||||
 | 
					            Assert.Empty(users2[5].RoleIds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var roles2 = users3[0].Roles;
 | 
				
			||||||
 | 
					            Assert.Equal(1, roles2[0].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role1", roles2[0].RoleName);
 | 
				
			||||||
 | 
					            Assert.Equal(2, roles2[1].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role2", roles2[1].RoleName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            roles2 = users3[1].Roles;
 | 
				
			||||||
            Assert.Equal(1, roles2[0].RoleId);
 | 
					            Assert.Equal(1, roles2[0].RoleId);
 | 
				
			||||||
            Assert.Equal("role1", roles2[0].RoleName);
 | 
					            Assert.Equal("role1", roles2[0].RoleName);
 | 
				
			||||||
            Assert.Equal(2, roles2[1].RoleId);
 | 
					            Assert.Equal(2, roles2[1].RoleId);
 | 
				
			||||||
@@ -68,7 +94,34 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
            Assert.Equal(3, roles2[2].RoleId);
 | 
					            Assert.Equal(3, roles2[2].RoleId);
 | 
				
			||||||
            Assert.Equal("role3", roles2[2].RoleName);
 | 
					            Assert.Equal("role3", roles2[2].RoleName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var users2 = roles2[0].Users;
 | 
					            roles2 = users3[2].Roles;
 | 
				
			||||||
 | 
					            Assert.Equal(1, roles2[0].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role1", roles2[0].RoleName);
 | 
				
			||||||
 | 
					            Assert.Equal(3, roles2[1].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role3", roles2[1].RoleName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            roles2 = users3[3].Roles;
 | 
				
			||||||
 | 
					            Assert.Equal(3, roles2[0].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role3", roles2[0].RoleName);
 | 
				
			||||||
 | 
					            Assert.Equal(2, roles2[1].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role2", roles2[1].RoleName);
 | 
				
			||||||
 | 
					            Assert.Equal(1, roles2[2].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role1", roles2[2].RoleName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Null(users3[4].Roles);
 | 
				
			||||||
 | 
					            Assert.Empty(users3[5].Roles);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var roles3 = fsql.Select<RoleLazyLoading>().IncludeMany(a => a.Users).ToList();
 | 
				
			||||||
 | 
					            Assert.Equal(3, roles3.Count);
 | 
				
			||||||
 | 
					            roles2 = roles3;
 | 
				
			||||||
 | 
					            Assert.Equal(1, roles2[0].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role1", roles2[0].RoleName);
 | 
				
			||||||
 | 
					            Assert.Equal(2, roles2[1].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role2", roles2[1].RoleName);
 | 
				
			||||||
 | 
					            Assert.Equal(3, roles2[2].RoleId);
 | 
				
			||||||
 | 
					            Assert.Equal("role3", roles2[2].RoleName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            users2 = roles2[0].Users;
 | 
				
			||||||
            Assert.Equal(4, users2.Count);
 | 
					            Assert.Equal(4, users2.Count);
 | 
				
			||||||
            Assert.Equal(11, users2[0].UserId);
 | 
					            Assert.Equal(11, users2[0].UserId);
 | 
				
			||||||
            Assert.Equal("user1", users2[0].UserName);
 | 
					            Assert.Equal("user1", users2[0].UserName);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1184,11 +1184,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                                var listKeys = list.Select(a =>
 | 
					                                var listKeys = list.Select(a =>
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    var arrVal = getListValue(a, tbref.Columns[0].CsName, 0) as Array;
 | 
					                                    var arrVal = getListValue(a, tbref.Columns[0].CsName, 0) as Array;
 | 
				
			||||||
 | 
					                                    if (arrVal == null) return null;
 | 
				
			||||||
                                    var arrObjVal = new object[arrVal.Length];
 | 
					                                    var arrObjVal = new object[arrVal.Length];
 | 
				
			||||||
                                    arrVal.CopyTo(arrObjVal, 0);
 | 
					                                    arrVal.CopyTo(arrObjVal, 0);
 | 
				
			||||||
                                    return arrObjVal;
 | 
					                                    return arrObjVal;
 | 
				
			||||||
                                }).Where(a => a != null).ToArray();
 | 
					                                }).ToArray();
 | 
				
			||||||
                                var arrExp = Expression.NewArrayInit(tbref.RefColumns[0].CsType, listKeys.SelectMany(a => a).Distinct()
 | 
					                                var arrExp = Expression.NewArrayInit(tbref.RefColumns[0].CsType, listKeys.Where(a => a != null).SelectMany(a => a).Distinct()
 | 
				
			||||||
                                    .Select(a => Expression.Constant(Utils.GetDataReaderValue(tbref.RefColumns[0].CsType, a), tbref.RefColumns[0].CsType)).ToArray());
 | 
					                                    .Select(a => Expression.Constant(Utils.GetDataReaderValue(tbref.RefColumns[0].CsType, a), tbref.RefColumns[0].CsType)).ToArray());
 | 
				
			||||||
                                var otmExpParm1 = Expression.Parameter(typeof(TNavigate), "a");
 | 
					                                var otmExpParm1 = Expression.Parameter(typeof(TNavigate), "a");
 | 
				
			||||||
                                var containsMethod = _dicTypeMethod.GetOrAdd(tbref.RefColumns[0].CsType, et => new ConcurrentDictionary<string, MethodInfo>()).GetOrAdd("Contains", mn =>
 | 
					                                var containsMethod = _dicTypeMethod.GetOrAdd(tbref.RefColumns[0].CsType, et => new ConcurrentDictionary<string, MethodInfo>()).GetOrAdd("Contains", mn =>
 | 
				
			||||||
@@ -1235,6 +1236,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    var item = list[y];
 | 
					                                    var item = list[y];
 | 
				
			||||||
                                    var dicListKeys = listKeys[y];
 | 
					                                    var dicListKeys = listKeys[y];
 | 
				
			||||||
 | 
					                                    if (dicListKeys == null) continue;
 | 
				
			||||||
                                    var navs = new List<TNavigate>();
 | 
					                                    var navs = new List<TNavigate>();
 | 
				
			||||||
                                    foreach (var dlk in dicListKeys)
 | 
					                                    foreach (var dlk in dicListKeys)
 | 
				
			||||||
                                    {
 | 
					                                    {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user