INSERT语句与FOREIGN KEY约束“ FK_dbo.ConsoleUserInfoes_dbo.ConsolesCheckBoxes_consoleId”冲突

时间:2018-07-27 18:59:54

标签: asp.net asp.net-mvc-5

我收到此错误:

  

INSERT语句与FOREIGN KEY约束“ FK_dbo.ConsoleUserInfoes_dbo.ConsolesCheckBoxes_consoleId”冲突。在数据库“ aspnet-ForePlay-20180525122039”的表“ dbo.ConsolesCheckBoxes”的“ ConsoleId”列中发生了冲突。

我正在使用Entity Framework和ASP.NET MVC 5和IdentityUser,并尝试将数据形式checkListBox插入表到我的数据库中。

这是在用户需要注册并填写表格时在注册视图上发生的。

public class ConsoleUserInfo
{
    [Key]
    public int identity { get; set; }

    [Required]
    [StringLength(255)]
    [ForeignKey("User")]
    public string userid { get; set; }

    [Required]
    [ForeignKey("consolesCheckBox")]
    public int consoleId { get; set; }

    public virtual ApplicationUser User { get; set; }
    public virtual ConsolesCheckBox consolesCheckBox { get; set; }
}

这是需要获取用户ID(窗体applictionUser)和consoleId的表 (形成ConsolesCheckBox)

这是ApplicationUserUser模型类:

public class ApplicationUser : IdentityUser
{
    [Required]
    [StringLength(255)]
    override
    public string UserName { get; set; }

    [Required]
    [StringLength(50)]
    public string Phone { get; set; }

    public byte[] UserPhoto { get; set; }

    public virtual UserAddress Address { get; set; }
    public virtual ICollection<ConsolesCheckBox> consoleCheckBox { get; set; }
}

这是checkBoxList表:

public class ConsolesCheckBox
{
    [Key]
    public int ConsoleId { get; set; }

    public string ConsoleName { get; set; }
    public bool IsChecked { get; set; }

    public virtual ICollection<ApplicationUser> ApplicationUser { get; set; }
}

这是我的帐户控制者,所有在注册中的获取和发布

// GET: /Account/Register
[AllowAnonymous]
public ActionResult Register()
{
        //using database
        using (ApplicationDbContext dbo = new ApplicationDbContext())
        {
            //data will save list of the consoleCheckBoxItem
            var data = dbo.consolesCheckBox.ToList();
            // because the view is request a common model, we will create new one
            CommenModel a = new CommenModel();
            a.ConsolesCheckBoxList = data;
            //  we will need to return common model, that way we will return a
            return View(a);
        }
    }

    //
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register([Bind(Exclude = "UserPhoto")]CommenModel model)
    {
        if (ModelState.IsValid)
        {
            // To convert the user uploaded Photo as Byte Array before save to DB
            byte[] imageData = null;
            if (Request.Files.Count > 0)
            {
                HttpPostedFileBase poImgFile = Request.Files["UserPhoto"];

                using (var binary = new BinaryReader(poImgFile.InputStream))
                {
                    imageData = binary.ReadBytes(poImgFile.ContentLength);
                }
            }

            var user = new ApplicationUser
            {
                UserName = model.registerViewModel.Email,
                Email = model.registerViewModel.Email,
                Phone = model.registerViewModel.Phone
            };

            user.UserPhoto = imageData;
            var result = await UserManager.CreateAsync(user, model.registerViewModel.Password);

            //after the user create, we will use the id and add the id to the userAddress table include
            // Address, longitude and latitude.
            using (ApplicationDbContext dbo = new ApplicationDbContext())
            {
                var currentUserId = user.Id;
                var pasinfo = dbo.userAddress.FirstOrDefault(d => d.Userid == currentUserId);

                if (pasinfo == null)
                {
                    pasinfo = dbo.userAddress.Create();
                    pasinfo.Userid = currentUserId;
                    dbo.userAddress.Add(pasinfo);
                }

                pasinfo.Address = model.useraddress.Address;
                pasinfo.latitude = model.useraddress.latitude;
                pasinfo.longitude = model.useraddress.longitude;

                dbo.SaveChanges();

                foreach (var item in model.ConsolesCheckBoxList.Where(x => x.IsChecked).Select(x => x.ConsoleId))
                {
                    var consoleUserInfo = new ConsoleUserInfo
                    {
                        userid = currentUserId,
                        consoleId = item
                    };

                    dbo.consoleUserInfo.Add(consoleUserInfo);
                }

                dbo.SaveChanges();
            }
    }
}

在寄存器GET中,我有一个通用模型,因为我在视图中使用了3个模型 这是常见的模型:

public class CommonModel
{
    public UserAddress useraddress { get; set; }
    public RegisterViewModel registerViewModel { get; set; }
    public List<ConsolesCheckBox> ConsolesCheckBoxList { get; set; }
}

在这里我需要您的帮助,我整天都在尝试解决问题。

0 个答案:

没有答案