繁体   English   中英

OAuthWebSecurity.CreateOrUpdateAccount生成FOREIGN KEY约束异常

[英]OAuthWebSecurity.CreateOrUpdateAccount generates FOREIGN KEY constraint exception

在过去的几个小时中,我一直在尝试在我的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。净/网页/教程/安全性/ 16-添加安全性和成员资格 ,我看不到我在这里缺少的东西...

谢谢你的时间。

好的,我刚发现...我使用代码第一类来初始化简单成员身份时声明系统创建的表的结构...(因为我需要将角色放在对象中以从网站进行管理)

例:

   [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上有一个外键,返回给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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM