BG1*_*100 5 c# sql-server entity-framework entity-framework-6 asp.net-identity
我的应用程序(内置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为"不创建",如果是,我该如何添加外键约束?如果没有,那我该如何处理呢?我不认为我想做的事情是不合理的.我只是想避免让两个"用户"表与隐含的外键链接(即没有实际的外键约束).
到底为什么要使用两个单独的DbContexts ?对于 ASP.NET 身份数据和业务实体来说,使用单一上下文会更容易:
public class DatabaseContext : IdentityDbContext<UserInfo>
{
public virtual DbSet<Entity> Entities { get; set; } // Your business entities
public DatabaseContext()
: base("name=DatabaseContext")
{
}
}
Run Code Online (Sandbox Code Playgroud)
请注意, 继承DatabaseContext自IdentityDbContext<UserInfo>.
这种方法有一些权衡:例如,您的数据访问层应该引用Microsoft.AspNet.Identity.Core和Microsoft.AspNet.Identity.EntityFramework;但是,如果您使用依赖项注入或实体框架迁移,那么在项目中拥有单个数据库上下文会使事情变得更加容易。
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |