我的应用程序(内置MVC5 / EF6)需要使用具有两个模式的单个数据库:
我想为每个模式使用单独的DbContext,identity
一个使用Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext<ApplicationUser>
帮助程序类创建,主application
一个在代码中创建,代码优先。有这样两个DbContexts的原因是我可以将主应用程序上下文放在一个单独的程序集中,并在其他相关项目中使用它而不必引用Asp.Net。
但是,我想在application
架构/上下文中引用一个表,其中包含我要添加到identity.AspNetUsers
表的外键以及一些其他额外字段。然后,我想在主上下文中创建一个映射到Users
表的identity.AspNetUsers
实体。
例如,我想要一个application.Tenants
表,其中identity.AspNetUsers
有一个外键,这样我就可以拥有属于单个租户的许多用户。
所有这一切都很好我认为并且没有任何问题,除了创建数据库,以及可能影响该表的任何迁移,因为我有两个DbContext尝试创建同桌。
我可以将OnModelCreating
中的表格标记为&#34;不要创建&#34;,如果是这样,我该如何添加外键约束?如果没有,那我该如何处理呢?我不认为我想做的事情是不合理的。我只是想避免让两个用户&#34;与隐含外键链接的表(即没有实际的外键约束)。
答案 0 :(得分:1)
为什么要使用两个单独的DbContext
s?为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.Core
和Microsoft.AspNet.Identity.EntityFramework
;但是,如果使用依赖项注入或实体框架迁移,则在项目中使用单个数据库上下文会使事情变得更加容易。