[英]Sharing the Users table between an IdentityDbContext, and a main application DbContext
我的應用程序(內置於 MVC5/EF6)需要使用具有兩個架構的單個數據庫:
我想為每個架構使用一個單獨的 DbContext, identity
一個是使用Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext<ApplicationUser>
幫助Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext<ApplicationUser>
類創建的,而主application
是在代碼中首先創建的。 有兩個這樣的 DbContext 的原因是,我可以將主應用程序上下文放在一個單獨的程序集中,並在其他相關項目中使用它,而不必引用 Asp.Net。
但是,我想引用application
架構/上下文中的一個表,其中包含一個我想添加到identity.AspNetUsers
表中的外鍵,以及其他一些額外的字段。 然后我想在映射到identity.AspNetUsers
表的主上下文中創建一個Users
實體。
例如,我想要一個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.Core
和Microsoft.AspNet.Identity.EntityFramework
; 但是,如果您使用依賴注入或實體框架遷移,那么在您的項目中擁有單個數據庫上下文會使事情變得更加容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.