Asp.net

擴展 ASP.NET Identity 2.0

  • May 28, 2015

我無法理解整個 ASP.Net Identity 框架,我首先嘗試將 Identity 1.0 集成到現有應用程序中,但最終得到了 2 個 DbContext 類,我的應用程序數據位於 MyDbContext 上,Identity 使用者數據位於 IdentityDbContext 上。

我想為我的應用程序數據和與身份相關的數據使用一個 DbContext,我在另一個問題上發現我可以像使用 DbContext 一樣使用 IdentityDbContext;但是,我想我錯過了一些東西。

我正在使用來自身份團隊的範例項目

PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre

並嘗試將 DbSet 屬性插入 ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext
{
   public ApplicationDbContext()
       : base("DefaultConnection")
   {
   }

   static ApplicationDbContext()
   {
       // Set the database intializer which is run once during application start
       // This seeds the database with admin user credentials and admin role
       Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
   }

   public virtual DbSet<Student> students { get; set; }
   public virtual DbSet<Teachers> teachers { get; set; }

   public static ApplicationDbContext Create()
   {
       return new ApplicationDbContext();
   }
}

我正在使用 ApplicationDbInitializer 種子方法來填充這兩個表,如下所示:

Student s = new Student { Name = "John" ... };
db.students.Add(s);
db.SaveChanges();

但是 EF 似乎沒有創建那兩個表,並且沒有呼叫種子方法,這是怎麼回事?

編輯:

好吧,我需要執行使用 EF 數據庫的程式碼來刪除和重新創建數據庫。

使用 IdentityDbContext 管理我的所有應用程序數據是否有任何成本?使用 IdentityDbContext 和使用通用版本 IdentityDbContext<IdentityUser> 有什麼區別?

在大多數情況下,最好只使用一個實體框架上下文,從那時起,您只需管理那個單一的上下文,這意味著更少的成本。

兩者之間的區別在於,IdentityDbContext它只是一個派生自 DbContext 的類(就像您自己製作時一樣),但它包含處理身份驗證的額外 DbSet,因此您不必自己實現它。派生IdentityDbContext是好的。有關更多資訊,您可以查看文件

引用自:https://stackoverflow.com/questions/26447631