C# 无法更新注册表上的表中的列

C# 无法更新注册表上的表中的列,c#,asp.net,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Identity,我试图自学asp.net.mvc,我开始了一个使用mvc默认模板的项目。 我稍微更改了模板,因此当使用默认操作方法注册时,我将新注册的用户id添加到另一个名为companys的表中 基本上,我在前端添加了一个新的文本字段。当用户注册时,他会在那里键入一个数字。在后端,我从companys表中查找一家公司,该ID与前面的数字匹配。如果存在匹配项,我希望将当前用户ID保存到companys表中名为CAId的列中 以下是整个操作方法(我在wait之后进行了修改): 当我注册一个用户时,我没有得到任何错

我试图自学asp.net.mvc,我开始了一个使用mvc默认模板的项目。 我稍微更改了模板,因此当使用默认操作方法注册时,我将新注册的用户id添加到另一个名为
companys
的表中

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

以下是整个操作方法(我在
wait
之后进行了修改):

当我注册一个用户时,我没有得到任何错误。用户已注册,但未使用新注册的用户ID更新
CAId
字段


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

我猜,您需要将您的实体附加到集合的基础上下文。
附件(公司)

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

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

对于将来会寻找类似问题答案的任何人来说-我问题中的代码工作得非常好。问题是在视图中,我使用的是默认的Register action方法,而不是上面修改的!Th感谢所有试图提供帮助的人!

在检索记录时尝试使用AsNoTracking。例如dbSet.AsNoTracking().FirstOrDefault(表达式)当将附加实体更新到上下文时没有意义。
db.companys.Find
附加公司。首先使用
AsNotracking
获取它是没有用的。
Find
方法已经返回了一个跟踪的实体,你不必修改它的状态。如果你不修改它的状态,它在之前处于什么状态ode>SaveChanges?我不确定我是否理解这个问题,但CAId的默认状态是null。无论如何,我认为@michael berezin是正确的。好的,那么在设置
CAId
属性后,但没有手动将其设置为
Modified
,公司的状态是什么?我指的是添加、修改、未更改等状态。{companyId=1,CAId=“标识字符串”}我尝试了这个,但没有成功。如果我理解正确,我相信currentUser.Id设置在我的代码部分之前。没有意义。
currentUser
是一个现有的实体。它没有被创建。那么如何保存
company.CAId
呢?您可能需要使用结果变量来获取Id(如果它是一个标识列,它通常在创建操作后返回)(var result=await UserManager.CreateAsync(user,model.Password);)
result
不包含
id
。它包含什么?
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();