【问题标题】:Aggregate data from two different database contexts聚合来自两个不同数据库上下文的数据
【发布时间】:2021-04-16 12:07:27
【问题描述】:

我有两个数据库上下文。

第一: ASP.NET 身份上下文。

public class IdentityContext : IdentityDbContext<IdentityAppUser>
{
    public IdentityContext(DbContextOptions options)
        : base(options)
    {
    }
}

身份用户。

public class IdentityAppUser : IdentityUser
{
}

第二: DatabaseContext.

public sealed class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions<DatabaseContext> options)
        : base(options)
    {
    }

    public DbSet<User> Users { get; set; }
}

域用户。包含身份用户 ID。

public class User : BaseEntity
{
    public string IdentityId { get; set; }
}

我正在使用 CQRS。我想返回完整的用户数据(身份信息 + 域模型信息)。所以我正在考虑实施。

  1. 保留两个单独的查询。第一个查询返回域用户,第二个返回身份用户。然后在 API 层合并查询结果。

  2. 为此目的保留单个查询。在应用层保留完整的用户模型。在查询处理程序中将域和身份用户合并到完整模型中。

  3. 将域用户移至基础设施层。创建包含完整用户信息的新域用户模型。保留单个查询以返回完整的用户数据。在查询处理程序中合并数据库用户模型(旧域用户)和身份用户。

哪种方法更好?

【问题讨论】:

    标签: c# asp.net-web-api cqrs onion-architecture


    【解决方案1】:

    我认为这个问题最终与从同一个数据库返回两个查询的结果非常相似。结果需要在某个地方合并。有时是存储库,有时是服务层,有时客户端代码对后端进行两次调用以创建单个页面。

    在哪里合并数据没有普遍的正确响应。有时可能很清楚(来自两个相关表的数据 => 在 SQL 中执行),有时不太清楚。

    请记住,整个解决方案中可能会使用实体(在本例中为用户)的多个视图,并且这些视图可能会与应用程序不同层中的其他数据相结合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 2023-03-23
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多