晚上好,我想做的是创建一个可以注册客户的表单。但是,如果电子邮件已经存在于数据库中,那么它必须更新同一电子邮件的其他客户端数据,例如firstname,lastname等。
到目前为止我做了什么:
首先返回true或false,具体取决于记录是否存在
public bool checkForExistingEmail(User user)
{
var res = (from c in db.Users
where c.Email == user.Email
select c).SingleOrDefault();
if (res == null)
{
return false;
}
else {
return true;
}
这里的创建方法是根据电子邮件更新用户数据,但显然它不起作用而且我得到了。 Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
public ActionResult Create(User user)
{
if (ModelState.IsValid && checkForExistingEmail(user) == false)
{
db.Users.Add(user);
db.SaveChanges();
return RedirectToAction("Index");
}
else if (checkForExistingEmail(user) == true)
{
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(user);
}
注意:
我还在Create.cshtml文件中添加了隐藏的@Razor元素@Html.HiddenFor(model => model.UserId)
。
答案 0 :(得分:1)
假设实体框架:
而不是手动设置EntityState.Modified
,我个人可能会做这样的事情。
public ActionResult Create(User user)
{
var res = (from c in db.Users
where c.Email == user.Email
select c).SingleOrDefault();
if(res == null)
{
db.Users.Add(user);
}
else
{
res.Prop1 = user.Prop1
res.Prop2 = user.Prop2
...
}
db.SaveChanges();
return RedirectToAction("Index");
}