有没有办法将一组 Include() 调用作为参数传递

问题描述 投票:0回答:1

我的系统中的所有用户都分布在 2 个数据库的 2 个表中。是的,我知道这不太好,但我们有一个身份数据库,其中包含用户的登录信息以及电子邮件、电话等。我使用该数据库,但无法更改其架构。

然后我就有了我的数据库。它还有一个用户表,其中包含每个用户的大量属性。它们共享一个属性,即 IdentityUser.Id 值。我有责任根据需要让它们保持同步。

我有一个类,它具有两个数据库的 DbContext,并且它一起对它们执行操作,以保持它们同步。除了定义我的用户记录的包含内容之外,一切都运行良好。目前我有:

public async Task<CombinedUser?> FindAsync(int userId, params string[] includes)
{

    Trap.Break();
    IQueryable<AppUser> query = AppDbContext.AppUsers;
    foreach (var include in includes)
        query = query.Include(include);
    query = query.Where(u => u.Id == userId);
    var user = await query.FirstOrDefaultAsync();
    if (user == null)
        return null;

    var identityUser = await IdentityDbContext.Users.FindAsync(user.IdentityUsersId);
    if (identityUser == null)
        return null;

    return new CombinedUser(identityUser, user);
}

这效果很好。但我更希望能够在

Include().Include().Include()
而不是
string[] includes
上传递一组。有办法做到吗?

entity-framework entity-framework-core
1个回答
0
投票

方法签名:

public async Task<CombinedUser?> FindAsync(int userId, params Expression<Func<AppUser, object>>[] includes)

方法体不变。

致电:

var user = await FindAsync(id, x => x.Foo, x => x.Bars);
© www.soinside.com 2019 - 2024. All rights reserved.