OAuthWebSecurity.CreateOrUpdateAccount生成FOREIGN KEY约束异常

时间:2013-04-17 19:15:24

标签: c# asp.net-mvc oauth

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

到目前为止,“本地帐户注册”(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语句与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-mvchttp://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership  我不知道我在这里缺少什么...

感谢您的时间。

2 个答案:

答案 0 :(得分: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错了.. 耶稣....

希望它会帮助某人

答案 1 :(得分: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; }
}