Asp.net

將 ASP.NET Identity 升級到 2.0 後出現異常

  • April 15, 2014

我的項目:VS2013,實體框架,Web 表單,數據庫優先,身份

我今天(2014-4-15)更新了我項目的所有 NuGet 包。其中Identity升級為2.0.0.0。

我以為事情進展順利,但不幸的是,當我執行應用程序時,以下語句給出了異常。

namespace xxx.Models
{
   // You can add User data for the user by adding more properties to your User class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
   public class ApplicationUser : IdentityUser
   {
   }

   public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
   {
       public ApplicationDbContext()
           : base("MyConnection") 
       {
       }
   }
...
}

異常資訊如下。它要求我進行 Code First 遷移。但我的項目是 Database First webforms 項目。我怎麼解決這個問題?謝謝!


Microsoft.AspNet.Identity.EntityFramework.dll 中出現“System.InvalidOperationException”類型的異常,但未在使用者程式碼中處理

附加資訊:支持“ApplicationDbContext”上下文的模型自數據庫創建以來已更改。這可能是因為 ASP.NET Identity Framework 使用的模型已更改或您的應用程序中使用的模型已更改。要解決此問題,您需要更新數據庫。考慮使用 Code First 遷移來更新數據庫 ( http://go.microsoft.com/fwlink/?LinkId=301867 )。

在使用 Code First 遷移更新數據庫之前,請通過在應用程序的 ApplicationDbContext 的建構子中設置 throwIfV1Schema = false 來禁用 ASP.NET Identity 的架構​​一致性檢查。公共 ApplicationDbContext() : base(“ApplicationServices”, throwIfV1Schema:false)

您需要按照錯誤說明來禁用模式一致性。這是您從 1.0 版升級到 2.0 版時發生的一次性事情。

public ApplicationDbContext() : base("MyConnection", throwIfV1Schema:false)

下一步 - 進行遷移。

之後一切都應該正常工作,您可以刪除它throwIfV1Schema:false

您還可以查看以獲取更多資訊

問題在這裡:

public class ApplicationUser : IdentityUser
{
}

我認為您應該更改為partial類以擴展實體框架中的實體。原因是 EF 會為每個實體生成代理類來連接數據庫。

該類partial應該寫在同一個命名空間中。

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