单个执行中的实体框架多个 DbContext

时间:2021-02-09 06:59:42

标签: asp.net-mvc entity-framework

我的 'db1' 中有一个 master 和 detail,并且 master 表中有一个名为 'EntryByUserId' 的列。 'db2' 中提供了用户表。
当所有表都在一个数据库中可用时,我们可以使用 include 函数直接获取用户详细信息。但是这里我的参考表在另一个数据库中,所以在我的情况下,用户对象将返回空值。所以任何人都请帮助我实现这一目标。 我在我的项目中创建了多个 dbcontext,但不知道如何获取。

以下是我们在单个数据库中所有表都可用时使用的代码。

dbcontext1.tbl_Master.Include(m => m.tbl_Detail).Include(m => m.tbl_user)
                    .AsNoTracking().FirstOrDefault();

1 个答案:

答案 0 :(得分:0)

干净地适应这种情况的一个选项,特别是对于像“用户”引用那样频繁访问的内容,例如报告 CreatedBy 或 ModifiedBy 跟踪行,将在 Db2 中实现一个视图,该视图列出来自 Db1 的用户。然后在您的主应用程序上下文中,您可以将 User 实体映射到视图而不是表。我会在您的 DbContext 和实体中放置保护措施,以阻止/防止对此 User 实体进行修改,并将用户的维护留给监督 Db1 表的 DbContext。

如果这是一个多租户系统,它有一个用于身份验证的系统数据库和每个租户的单独数据库,这些数据库根据记录跟踪 CreatedBy 之类的东西,我建议考虑一个系统来检查和复制 auth 数据库和各自的租户数据库。这样做的原因是为了帮助强制执行数据和用户引用的引用完整性。视图方法的问题是没有可用的约束来确保 UserId 引用实际上对应于其他数据库中用户表中的一行。它可以被索引,但不受约束,因此您必须处理无效数据的可能性。