首页 > 解决方案 > 另一个 DbContext 上的 ASP.NET DbSet 标识属性

问题描述

在我的 ASP.NET CORE API 项目中,我有两个不同的数据库上下文用于两个不同的数据库。

一个上下文用于标识 (Microsoft.AspNetCore.Identity),第二个用于数据。

问题是数据内容与身份有关,在代码中我需要知道这些值。

我有一个名为“主题”的课程,每个主题都与一个身份有关。该类看起来像:

public class Topic
{
    [Key]
    public Guid Id { get; set; }

    [Required]
    public int ApiUserId { get; set; }

[Required]
    public virtual ApiUser ApiUser { get; set; } 
// the ApiUser class is based on Microsoft.AspNetCore.Identity.IdentityUser

    [Required]
    public string Name { get; set; }
}

但是当我现在为数据上下文添加迁移时,它包括 ApiUser 表的创建。

这个 ApiUser 表已经在身份上下文中,应该从那里集成。

有没有办法像这样配置 DbContext 的 DbSet?

我的数据上下文如下所示:

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

    public DbSet<Topic> Topics { get; set; }
}

也许我配置的其他相关服务:

services.AddIdentityCore<ApiUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<identityContext>();

是否可以将 Topic 类属性 ApiUser 映射到身份上下文?

就像 DbSet 标识属性应该处理另一个 DbContext 访问一样。

我希望我写的问题可以理解,否则请告诉我。

在我看来,有一种方法可以定义此身份属性的加载操作。

已经感谢您提供解决方案或提示您将如何解决此问题。

标签: c#asp.netentity-framework-migrationsdbcontextdbset

解决方案


首先,您有两个 DbContext 和两个数据库。如果你想在一个上下文中拥有 APIUser 和 Topics,你应该创建一个 DbContext。不过,您还有其他选择。例如,您可以在 dataContext 中为 ApiUser 表创建一个表,但该表包含有关主题表(或解决方案)的 ApiUser 的相关信息(如 ID、FullName 等)。在这种方法中,您应该更新在第二个 dbContext 中的每次更改后,datacontext 中的 ApiUser 表。


推荐阅读