【发布时间】:2019-08-28 23:23:16
【问题描述】:
_context.Update(v) ;
_context.SaveChanges();
当我使用此代码时,SQL Server 会添加一条新记录,而不是更新 当前上下文
[HttpPost]
public IActionResult PageVote(List<string> Sar)
{
string name_voter = ViewBag.getValue = TempData["Namevalue"];
int count = 0;
foreach (var item in Sar)
{
count = count + 1;
}
if (count == 6)
{
Vote v = new Vote()
{
VoteSarparast1 = Sar[0],
VoteSarparast2 = Sar[1],
VoteSarparast3 = Sar[2],
VoteSarparast4 = Sar[3],
VoteSarparast5 = Sar[4],
VoteSarparast6 = Sar[5],
};
var voter = _context.Votes.FirstOrDefault(u => u.Voter == name_voter && u.IsVoted == true);
if (voter == null)
{
v.IsVoted = true;
v.Voter = name_voter;
_context.Add(v);
_context.SaveChanges();
ViewBag.Greeting = "رای شما با موفقیت ثبت شد";
return RedirectToAction(nameof(end));
}
v.IsVoted = true;
v.Voter = name_voter;
_context.Update(v);
_context.SaveChanges();
return RedirectToAction(nameof(end));
}
else
{
return View(_context.Applicants.ToList());
}
}
【问题讨论】:
-
欢迎来到 SO :)。我们需要更多代码来帮助您。特别是,
v来自哪里?是参数吗?您面临的问题是:DbContext不知道v,这意味着它没有跟踪它。当您致电Update时,它会在内部检查并说:嗯.. 我不认识这个人,所以我最好插入它。要修复,你必须先加载它,然后调用Update。 -
public DatabaseContext(DbContextOptions
options) : base(options) { } public DbSet Roles { get;放; } 公共 DbSet 用户 { 获取;放; } 公共 DbSet 投票 { 获取;放; } public DbSet 申请者 { get;放; } } //// public HomeController(DatabaseContext context) { _context = context; } ...... //// 投票 v = new Vote() { .. } -
这就是为什么。 v 是一个新实例,如果没有您告诉它,DbContext 无法更新它。此外,v 必须有一个 Id,以便 DbContext 可以找到它。请将代码放在您的问题中,而不是在 cmets 中,因为它很难阅读。
-
_context.SaveChanges() 跟踪所有更改,当实体发生更改时,无需调用 _context.Update(),_context.SaveChanges() 高效,您的实体将被更新,请注意Entity Framework Update
-
@reza.nadrian 确保将我的答案标记为已接受,如果它可以帮助您解决问题。这就是你用虚假的互联网积分“感谢我”的方式。 :D
标签: asp.net-core