2013-04-17 109 views
0

我一直試圖在過去的時間中添加Facebook登錄我的MVC 4網站。 。OAuthWebSecurity.CreateOrUpdateAccount生成外鍵約束的例外

到目前爲止, '本地註冊帳戶'(WebSecurity.CreateAccount()的作品完美

在我businesslogic,我的代碼看起來是這樣的:

public ValidationReturn<User> AddUser(User data, string provider, string providerUserId) 
{ 
.... 

Repository.Insert(data); 
SaveChanges(); 

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, data.LoginName); 

現在,當我嘗試創建這樣的帳戶,該OAuthWebSecurity.CreateOrUpdateAccount拋出一個異常:

INSERT語句衝突與外鍵約束 「FK_dbo.webpages_O AuthMembership_dbo.webpages_Membership_UserId」。該 衝突發生於數據庫「Wims的」表「dbo.webpages_Membership」, 欄「用戶ID」。

我看到我的用戶在我的用戶表,我的理解看,爲什麼它崩潰的DB計劃......但我沒有任何想法的原因...是OAuthWebSecurity.CreateOrUpdateAccount應該在創造紀錄網頁會員呢?如果是這樣,密碼怎麼樣?

我一直在檢查網絡上幾個教程是這樣的: http://www.asp.net/mvc/tutorials/mvc-4/using-oauth-providers-with-mvc,或http://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership ,我看不出有什麼我失蹤這裏...

感謝您的時間。

回答

0

好吧,我剛剛發現......我使用聲明初始化simplemembership時系統創建的表的結構...(因爲我需要把角色的對象來管理它的代碼一流從網站)

例如:

[Table("webpages_OAuthMembership")] 
    public class OAuthMembership 
    { 
     [Key, Column(Order = 0), StringLength(30)] 
     public string Provider { get; set; } 

     [Key, Column(Order = 1), StringLength(100)] 
     public string ProviderUserId { get; set; } 

     public int UserId { get; set; } 

     //[Column("UserId"), InverseProperty("OAuthMemberships")] 
     //public Membership User { get; set; } 
    } 

一些FK的錯了.. 耶穌....

希望這將幫助別人

0

對於我來說,我發現我對會員模型的代碼在OAuthMembership上有一個外鍵返回到Membership表。這是不正確的,因爲你可以有一個OAuthMembership登錄,沒有本地會員記錄。 我不得不評論如下:

[Table("webpages_Membership")] 
public class Membership 
{ 
    public Membership() 
    { 
     Roles = new List<Role>(); 
     //OAuthMemberships = new List<OAuthMembership>(); 
    } 

    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int UserId { get; set; } 
    public DateTime? CreateDate { get; set; } 
    [StringLength(128)] 
    public string ConfirmationToken { get; set; } 
    public bool? IsConfirmed { get; set; } 
    public DateTime? LastPasswordFailureDate { get; set; } 
    public int PasswordFailuresSinceLastSuccess { get; set; } 
    [Required, StringLength(128)] 
    public string Password { get; set; } 
    public DateTime? PasswordChangedDate { get; set; } 
    [Required, StringLength(128)] 
    public string PasswordSalt { get; set; } 
    [StringLength(128)] 
    public string PasswordVerificationToken { get; set; } 
    public DateTime? PasswordVerificationTokenExpirationDate { get; set; } 

    public ICollection<Role> Roles { get; set; } 

    //[ForeignKey("UserId")] 
    //public ICollection<OAuthMembership> OAuthMemberships { get; set; } 
}