2013-04-17 69 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; } 
}