2014-02-28 58 views
0

我有一個使用Asp.Net身份的問題。Asp.Net身份外部登錄問題

我有一個ASP.NET MVC 5應用程序,其中有一個從IdentityUser類繼承的ApplicationUser類。我沒有使用單獨的AuthenticationContext,我只有一個DbContext。

我正在進行網站身份驗證,我想在我的應用程序中使用Facebook登錄。

我應用了必要的設置,當我點擊Facebook按鈕時,我在AccountController.ExternalLoginCallback方法中得到這個異常。

> Invalid column name 'User_Id'. Description: An unhandled exception 
> occurred during the execution of the current web request. Please 
> review the stack trace for more information about the error and where 
> it originated in the code. 
> 
> Exception Details: System.Data.SqlClient.SqlException: Invalid column 
> name 'User_Id'. 
> 
> Source Error: 
> 
> 
> 
> Line 220: Line 221:   // Sign in the user with this external 
> login provider if the user already has a login Line 222:   
> var user = await UserManager.FindAsync(loginInfo.Login); Line 223:  
> if (user != null) Line 224:   { 

這對我來說真的很奇怪,因爲數據庫中沒有user_id列。 我使用代碼優先遷移,我知道什麼時候類有一個複雜的屬性,但沒有外鍵屬性Code First Migration將在數據庫中生成外鍵屬性。

所以,我迷路了,我試圖調試它,但我沒有任何結果。

有人可以幫助我嗎?

+0

在與Google進行身份驗證時是否有效?同樣的錯誤? – vidalsasoon

+0

它沒有。我得到了同樣的錯誤。 – user295541

回答

0

這和外部登錄沒有任何關係。在某個地方,有些東西正在尋找一個User_Id列,當然這個列是不存在的,因爲那是你得到的錯誤。

該列名稱的格式通常來自基於代碼的基於約定的外鍵,即存在具有public virtual ApplicationUser User { get; set; }的類並且沒有用於存儲該中繼元素的顯式id屬性。因此,實體框架將創建並嘗試使用格式爲[NavigationPropertyName]_[EntityIdProperty]的表格中的列:在這種情況下,User_Id

通常情況下,由於實體框架會引發異常,首先會告訴您需要在數據庫上運行遷移,但得不到足夠的這種類型的錯誤。但是,您可能會將其從/更改爲明確的外鍵屬性,或者正在使用類似於數據庫優先級的內容,並禁用了遷移。

基本上,你只需要找到哪些實體有一個導航屬性ApplicationUser沒有相應的屬性來保存的密鑰,然後是一個User_Id列添加到對應於該實體表,或更正代碼,以便它會查找正確的列名稱。

-1
{ 
    SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[PageName] AS [PageName], 
    [Extent1].[ControllerName] AS [ControllerName], 
    [Extent1].[ActionMethod] AS [ActionMethod], 
    [Extent1].[IsActive] AS [IsActive], 
    **[Extent1].[User_Id] AS [User_Id]** 
    FROM [dbo].[Pages] AS [Extent1] 
} 

我有這種類型的錯誤的問題:

Invalid column name 'User_Id'

...因爲我還沒有在Pages表中使用任何User_Id