2017-05-26 53 views
2

我有一個使用SQL Server安裝的Web項目,現在必須遷移到PostgreSQL。我正在使用實體框架版本6.0與最新版本的Microsoft.AspNet.Identity來管理用戶憑證。我正在使用VS2015和.NET Framework 452.無法使用PostgreSQL配置AspNet.Identity

該項目對於除AspNet.Identity之外的所有內容都適用於PostgreSQL服務器。當我嘗試註冊新用戶或進行登錄時,我收到了this question中描述的相同錯誤消息。相同的錯誤,相同的行,但問題是2歲,給出的解決方案不適用於我(我已經嘗試了多次添加遷移和更新數據庫)。

其他所有的工作,我已經檢查,我的postgreSQL數據庫包含任何與AspNet.Identity相關的表,即使它們是在項目使用SQL Server時自動創建的。其他與模型相關的表格正在出現並正在工

謝謝。

+0

請使用** clear問題語句**編寫問題標題,而不是與問題/問題 –

+0

相關的工具您是否有從IdentityDbContext繼承的單個上下文或單獨的上下文?嘗試創建所有對象的主腳本以查看它產生的內容:'update-database -Script -SourceMigration:$ InitialDatabase'。 –

+0

我有單獨的上下文,其中一個用於身份,另一個用於其他所有內容。這兩個上下文使用相同的連接字符串,我會嘗試你所說的。謝謝@Steve,標題改變了抱歉。 – VPerezQ

回答

2

我無法使微軟的AspNet.Identity與PostgreSQL的工作,它似乎是專與SQL Server進行工作,不承認一個不同的數據的上下文配置的情況下,不管你做什麼。

我現在所有的東西都在外部庫的幫助下工作,所以我會在別人遇到這個問題時提供一個我的問題的答案。

我跟着存在於以下項目的指示(增光vincechan):

步驟2是有點問題的。將項目導入我的解決方案後,我必須解決其中的參考問題。在軟件包管理器控制檯中,您可以安裝丟失的軟件包和/或更新已過期的軟件包。需要我的最終配置使用:

  • 3.2.2 Npgsql的上我的主要項目
  • 2.2.7 Npgsql的上下載的項目(使用Npgsql.EntityFramework(使用EntityFramework6.Npgsql) )

一切準備就緒後,請添加新遷移(Add-Migration <migration-name)並更新數據庫(Update-Database) )。

現在執行創建標識相關表的SQL腳本,它們將不會像SQL Server那樣自動創建。該腳本包含在項目中(文件PostgreSQLIdentity.sql)。

一切都應該現在的工作。原諒這個答案糟糕的格式。

1

如果你的PostgreSQL數據庫不包含與ASP.NET身份的任何表,那麼它很可能意味着遷移不是爲ASP.NET身份上下文類啓用。就我而言,我使用VS腳手架和我的意思是這個類:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 

所以,第一步是運行在包管理器控制檯Enable-Migrations不帶參數。如果你有一個乾淨的數據庫,那麼它將在SO topic mentioned earlier中工作。所以,如果你想要一個簡單的解決方案,然後徹底銷燬你的PostgreSQL數據庫,再次創建它,只需運行Enable-Migrations

如果你不想破壞你的PostgreSQL數據庫和/或丟失任何遷移之前做那麼就能夠遷移它只爲單獨的目錄 ASP.NET身份背景。已經有一個SO answer解釋如何做到這一點。

ApplicationDbContext啓用某些目錄遷移(如MigrationsIdentity):

Enable-Migrations -ContextTypeName MyProject.Models.ApplicationDbContext -MigrationsDirectory MigrationsIdentity 

添加初始遷移此背景:

Add-Migration IdentityInitial -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration 

應用此遷移:

Update-Database -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration 

這些後步驟將會在你的Po中有ASP.NET身份表通過Code First自動生成的stgreSQL數據庫生成,您不需要使用SQL腳本手動運行任何操作。

在你已經提到你有單獨的上下文的評論。然而,多種上下文方法存在缺點:you won't use them together easily。每次遷移數據庫時,還必須明確指定與-ConfigurationTypeName標誌的上下文。我會像discussed already一樣使用單個上下文,但這取決於您的任務的要求。

版本:

  • 的EntityFramework 6

  • Microsoft.AspNet.Identity.Core 2.1

  • Npgsql的3.1.10.0

  • EntityFramework6.Npgsql 3.1.1.0