c# - 在 IdentityDbContext 和主应用程序 DbContext 之间共享用户表

标签 c# sql-server entity-framework entity-framework-6 asp.net-identity

我的应用程序(内置于 MVC5/EF6 中)需要使用具有两个模式的单个数据库:

  • identity:存储用户和角色的所有 AspNet 身份表。
  • application:存放我所有的通用应用表。

我想为每个模式使用一个单独的 DbContext,使用 identity一个是用 Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext<ApplicationUser> 创建的辅助类和主要类 application一个是用代码先创建的。有两个像这样的 DbContext 的原因是,我可以将主应用程序上下文放在一个单独的程序集中,并在其他相关项目中使用它,而无需引用 Asp.Net。

但是,我想引用 application 中的一个表带有我想添加到 identity.AspNetUsers 的外键的架构/上下文表,以及其他一些额外的字段。然后我想创建一个 Users映射到 identity.AspNetUsers 的主要上下文中的实体表。

例如,我想要一个 application.Tenants其中表identity.AspNetUsers有一个外键,这样我就可以拥有属于一个租户的多个用户。

我认为所有这一切都很好,并且不会出现任何问题,除了创建数据库以及可能影响该表的任何迁移,因为我将有两个 DbContext 尝试创建同一个表。

我可以在 OnModelCreating 内标记一个表吗?作为“不创建”,如果是这样,我该如何添加外键约束?如果没有,我该如何处理?我不认为我正在尝试做的事情是不合理的。我只是想避免将两个“用户”表与隐含的外键链接(即没有实际的外键约束)。

最佳答案

您为什么要使用两个单独的 DbContext秒?为 ASP.NET 身份数据和您的业务实体提供单一上下文会更容易:

public class DatabaseContext : IdentityDbContext<UserInfo>
{
    public virtual DbSet<Entity> Entities { get; set; } // Your business entities

    public DatabaseContext()
        : base("name=DatabaseContext")
    {
    }
}

请注意 DatabaseContext继承自 IdentityDbContext<UserInfo> .

这种方法有一些取舍:例如,您的数据访问层应该引用 Microsoft.AspNet.Identity.CoreMicrosoft.AspNet.Identity.EntityFramework ;但是,如果您使用依赖项注入(inject)或 Entity Framework 迁移,那么在您的项目中拥有一个数据库上下文会使事情变得容易得多。

关于c# - 在 IdentityDbContext 和主应用程序 DbContext 之间共享用户表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28881956/

相关文章:

mysql - 基于主表更新从属表

c# - 不允许两个不同对象范围之间的对象引用

c# - DateTime.Now 到底什么时候更新?

sql-server - Azure 中的服务器端分页 (MS SQL)

c# - 如何使用 linq toEntity 在单个查询中获取两个列值

c# - 如何在 EF 中获取实体更改增量?

c# - 在 if block 中将 short 转换为 int

c# - 按 2 次后退按钮退出 Unity3D Android 应用程序

sql - 在 SQL Server 中向上舍入到最接近的 500 或 1000

asp.net - ASP.NET网站管理工具:无法连接到SQL Server数据库