OAuthWebSecurity.CreateOrUpdateAccount生成FOREIGN KEY约束异常

本文关键字:约束 异常 KEY FOREIGN CreateOrUpdateAccount 生成 OAuthWebSecurity | 更新日期: 2023-09-27 18:09:36

我在过去的几个小时里一直在尝试在我的MVC 4网站中添加facebook登录。

到目前为止,'本地帐户注册' (WebSecurity.CreateAccount())工作正常。

在我的业务逻辑中,我的代码看起来像这样:

public ValidationReturn<User> AddUser(User data, string provider, string providerUserId)
{
....
Repository.Insert(data);
SaveChanges();
OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, data.LoginName);

现在,当我尝试创建这样的帐户时,OAuthWebSecurity。CreateOrUpdateAccount抛出一个异常:

INSERT语句与FOREIGN KEY约束冲突"FK_dbo.webpages_OAuthMembership_dbo.webpages_Membership_UserId"。的数据库"Wims",表"dbo.webpages_Membership"发生冲突,列的UserId。

我在我的UserTable中看到我的用户,并且我理解查看db方案为什么会崩溃…但是我不知道为什么……OAuthWebSecurity。CreateOrUpdateAccount应该在webpages_Membership创建一个记录?如果有,那么密码呢?

我一直在网上检查几个教程,像这样: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我不知道我在这里错过了什么……

感谢您的宝贵时间。

OAuthWebSecurity.CreateOrUpdateAccount生成FOREIGN KEY约束异常

好吧,我刚刚发现…我使用code first类来声明系统在初始化simplemmembership时创建的表的结构。(因为我需要把角色放在一个对象来管理它从网站)

的例子:

   [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是错误的…耶稣…

希望对大家有所帮助

对于我来说,我发现用于成员关系模型的代码在OAuthMembership表上有一个外键。这是不正确的,因为您可以有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; }
}