无法更新寄存器中表中的列

时间:2017-01-03 20:43:55

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity

我正在尝试自学asp.net.mvc并且我使用MVC的默认模板启动了一个项目。 我稍微更改了模板,因此当使用默认操作方法的寄存器时,我在另一个名为href='u17003I9f1/Prob_Heavy.csv'的表中添加新注册的用户ID。

基本上,我在前端添加了一个新的文本字段。当用户注册时,他在那里键入一个数字。在后端,我从companies表中查找公司,该ID与前端的数字相匹配。如果匹配,我想将当前用户ID保存到名为CAId

的公司表中的列

以下是整个行动方法(我在companies之后进行了修改):

await

以下是我在上述方法中尝试的内容:

public async Task<ActionResult> RegisterCA(RegisterCAEViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            var currentUser = UserManager.FindByName(user.UserName);

            var roleresult = UserManager.AddToRole(currentUser.Id, "CompanyAdministrator");


            await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

            var company = db.Companies.Find(model.CompanyCode);
            // find the company by the id passed in the frontend.
            if (company!=null)
            {
                company.CAId = currentUser.Id;
                //set the id
                db.Entry(company).State = EntityState.Modified;
                db.SaveChanges();
            }
                return RedirectToAction("Index", "Home");
        }
        AddErrors(result);
    }
    return View(model);
}

当我注册用户时,我没有收到任何错误。用户已注册,但 var company = db.Companies.Find(model.CompanyCode); // find the company by the id passed in the frontend. if (company!=null) { company.CAId = currentUser.Id; //set the id db.Entry(company).State = EntityState.Modified; db.SaveChanges(); 字段未使用新注册的用户ID更新。

拜托,有人可以帮忙解释一下!我将非常感激,因为我已经坚持了几个小时:(。

3 个答案:

答案 0 :(得分:0)

尝试移动此行: company.CAId = currentUser.Id; 行后 db.SaveChanges(); currentauser id是一个标识列,只有在保存到db之后才会设置它。

答案 1 :(得分:0)

对于那些将来会寻找类似问题答案的人 - 我的问题中的代码绝对正常。问题是在视图中我使用的是默认的Register操作方法,而不是上面的修改!感谢所有想要帮助的人!

答案 2 :(得分:-1)

我的猜测,你需要将你的实体附加到集合背后的上下文中 dbSet.Attach(公司)

然后 context.Entry(company).State = EntityState.Modified; db.SaveChanges();