add PgArrayToMany IncludeMany Dto test #1147

This commit is contained in:
2881099 2022-06-06 19:20:59 +08:00
parent 24d072409d
commit 1a0f0d0f02
3 changed files with 24 additions and 1 deletions

View File

@ -58,6 +58,17 @@ namespace FreeSql.Tests.PostgreSQL
};
Assert.Equal(6, fsql.Insert(users).ExecuteAffrows());
var users4 = fsql.Select<UserLazyLoading>().IncludeMany(a => a.Roles).ToList(a => new
{
user = a, roles = a.Roles
});
var roles4 = fsql.Select<RoleLazyLoading>().IncludeMany(a => a.Users).ToList(a => new
{
role = a,
users = a.Users
});
var users3 = fsql.Select<UserLazyLoading>().IncludeMany(a => a.Roles).ToList();
Assert.Equal(6, users3.Count);
var users2 = users3;

View File

@ -222,6 +222,17 @@ namespace FreeSql.Internal.CommonProvider
var bindings = new List<MemberBinding>();
if (imni.IsOutputPrimary) bindings.AddRange(imni.Table.Primarys.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName]))));
if (imni.Childs.Any()) bindings.AddRange(imni.Childs.Select(a => Expression.Bind(imni.Table.Properties[a.Key], GetIncludeManyNewInitExpression(a.Value))));
var pgarrayToManys = imni.Table.GetAllTableRef().Select(tr =>
{
if (tr.Value.RefType != TableRefType.PgArrayToMany) return null;
var reftb = _orm.CodeFirst.GetTableByEntity(tr.Value.RefEntityType);
if (tr.Value.RefColumns[0] == reftb.Primarys[0])
{
bindings.Add(Expression.Bind(imni.Table.Properties[tr.Value.Columns[0].CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[tr.Value.Columns[0].CsName])));
return tr.Key;
}
return null;
}).ToList();
return Expression.MemberInit(imni.Table.Type.InternalNewExpression(), bindings);
}

View File

@ -48,6 +48,7 @@ namespace FreeSql.Internal.Model
}
return tryref;
}
public IEnumerable<KeyValuePair<string, TableRef>> GetAllTableRef() => _refs;
//public void CopyTo(TableInfo target)
//{