c# - 另一个 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 访问一样。
我希望我写的问题可以理解,否则请告诉我。
在我看来,有一种方法可以定义此身份属性的加载操作。
已经感谢您提供解决方案或提示您将如何解决此问题。
解决方案
首先,您有两个 DbContext 和两个数据库。如果你想在一个上下文中拥有 APIUser 和 Topics,你应该创建一个 DbContext。不过,您还有其他选择。例如,您可以在 dataContext 中为 ApiUser 表创建一个表,但该表包含有关主题表(或解决方案)的 ApiUser 的相关信息(如 ID、FullName 等)。在这种方法中,您应该更新在第二个 dbContext 中的每次更改后,datacontext 中的 ApiUser 表。
推荐阅读
- django - Django:管理更改表单中的自定义按钮返回自定义视图功能的错误网址
- material-ui - 如何在故事书中显示 material-ui 主题对象
- r - 使用 cairo 在轴标题中保存带有表达式和 unicode 的 ggplot
- spring-cloud-stream - Spring Cloud kafka Stream Binder transactionIdPrefix 向出站主题发送2条消息
- python - 如何将递归 VIF 消除合并到 scikit-learn 的管道中?
- reactjs - 如何获取可选行数?
- python - 如何使字典中除第一个键之外的所有键都小写
- macos - 在运行 python 应用程序时获取 OSError
- css - 如何使对话框中的最后一个元素在屏幕上可见?
- virtual-machine - PowerCLI Remove-HardDisk 还会删除控制器