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 Web API 中的多个表单数据键接收文件
从返回多个实际表的复杂存储过程中检索 asp.net MVC 中的数据