将实体添加到身份模型中



我目前正在遇到错误,我理解错误,但我不知道我在哪里犯错

Alter表语句与外键约束" fk_dbo.aspnetusers_dbo.companydetails_usercompanyid"。冲突发生在数据库" pxwhitespiderdev",table" dbo.com.panydetails",列'CompanyId'。

创建MVC应用程序时,在身份模型中自动化

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }

    public int userCompanyID { get; set; }
    [ForeignKey("userCompanyID")]
    public CompanyDetails company { get; set; }
}

这是我试图创建

的实体
 public class CompanyDetails
 {
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int companyID { get; set; }
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 1)]
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
 }

以及在registerviewModel类中

public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
    public CompanyDetails company { get; set; }
}

在应用程序使用者类和CompanyDetails类中,公司ID在具有相同的变量名称中相同。我认为这是一个问题,因此更改了应用程序器类中的变量名称,直到我尝试再次更新数据库并发现情况并非如此。

添加新的companyID属性时,实体框架显然需要在dbo.AspNetUsers表中添加新列以表示它。由于此列以前不存在,也不是不可删除的,因此需要在现有记录的列中设置一些默认值。对于int类型,默认值为0。但是,0作为外键是不可接受的,因此,当实体框架试图附加该约束时,它会失败。

解决问题的最简单方法是1)从dbo.AspNetUsers或2)删除所有现有行,然后在附加外键约束之前,将列添加并手动将值更新为实际的CompanyDetails ID。

另外,您也可以使companyId成为无效的INT,该INT将允许实体框架在添加列时在数据库中将其取消。可以将外键约束添加到空无根据的列中,因此一切都应该起作用。但是,这意味着该关系现在将是可选的。如果每个用户都应始终具有相关的CompanyDetails,请找到另一种解决问题的方法。

相关内容

  • 没有找到相关文章

最新更新