asp.net mvc 从多个上下文加载相关数据

Posted

技术标签:

【中文标题】asp.net mvc 从多个上下文加载相关数据【英文标题】:asp.net mvc load related data from multiple contexts 【发布时间】:2021-11-03 07:12:40 【问题描述】:

我有一个带有 2 个上下文的 MVC .Net Core 3.1 项目。一个是标准身份上下文,另一个是应用程序上下文。 它们在服务器上存储为 2 个独立的数据库。

在我的应用程序中,我有一个实体“Project”,它有一个“ProjectLeadUserId”字段,我在其中存储来自 AspNetUsers 的该用户的 ID。

当我列出所有打开的项目时,我想显示来自 AspNetUsers 的“用户名”,而不是与每个项目相关的 GUID。

通常我会在两者之间有一个外键,所以在我看来我可以做类似的事情:

project.ProjectLead.UserName

但我无法确定如何在我的实体中设置它,因为 FK 将在不同的上下文中。

这可能吗,还是我通过分离身份和应用程序上下文给自己造成了问题?

编辑: 忽略外键问题,因为我可以在应用程序逻辑中处理它。当涉及多个上下文时,有没有办法加载相关数据。 例如获得项目列表后,是否可以使用 AspNetUsers.Id 和 Project.ProjectLeadUserId 加载相关的 AspNetUsers 数据?

【问题讨论】:

【参考方案1】:

引用 SQL Server documentation:

FOREIGN KEY 约束只能引用同一服务器上同一数据库中的表。跨数据库参照完整性必须通过触发器来实现。有关详细信息,请参阅创建触发器。

SQL Server 中的不同数据库之间不可能有一个外键。

如果 2 个上下文针对同一个数据库,我认为您想要的仍然不可能。

在我过去的项目中,我经常看到人们扩展 IdentityDbContext 以创建他们的数据库上下文并仅使用它。

【讨论】:

以上是关于asp.net mvc 从多个上下文加载相关数据的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 5 中从数据库加载 Razor 视图

asp.net mvc 加载慢

从 ASP.NET MVC Web API 中的多个表单数据键接收文件

从返回多个实际表的复杂存储过程中检索 asp.net MVC 中的数据

ActionLink 与 ASP.NET MVC3 中的多个类

ASP.NET Mvc开发之EF延迟加载