C# 无法更新注册表上的表中的列
我试图自学asp.net.mvc,我开始了一个使用mvc默认模板的项目。 我稍微更改了模板,因此当使用默认操作方法注册时,我将新注册的用户id添加到另一个名为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之后进行了修改): 当我注册一个用户时,我没有得到任何错
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
方法已经返回了一个跟踪的实体,你不必修改它的状态。如果你不修改它的状态,它在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();