我正在尝试自学asp.net.mvc,并使用mvc的默认模板启动了一个项目。我稍微更改了一下模板,所以当使用默认操作方法注册时,我会将新注册的用户id添加到另一个名为companies
的表中。
基本上,我在前端添加了一个新的文本字段。当用户注册时,他会在那里键入一个数字。在后台,我从companies
表中查找一家公司,该公司的ID与前台的号码相匹配。如果匹配,我想将当前用户ID保存到公司表中名为CAId 的列中
以下是整个操作方法(我在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();
当我注册用户时,我不会收到任何错误。用户已注册,但CAId
字段不会用新注册的用户ID更新。
请有人帮忙解释一下!我将非常感激,因为我已经被这个问题困扰了几个小时:(.
尝试移动此行:公司CAId=当前用户Id;线路之后数据库。SaveChanges();currentauser id是一个标识列,只有在将其保存到数据库后才会对其进行设置。
对于将来要寻找类似问题答案的人来说-我的问题中的代码运行得非常好。问题是,在视图中,我使用的是默认的Register操作方法,而不是上面修改的方法!感谢所有试图提供帮助的人!
我猜,您需要将实体附加到集合的底层上下文
dbSet.Attach(公司)
然后上下文Entry(company).State=EntityState.Modified;数据库。SaveChanges();