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我不知道我在这里错过了什么……
感谢您的宝贵时间。
好吧,我刚刚发现…我使用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; }
}