我正在具有EC Core(2.1.0-preview1-final)的Linux上使用Sql Server
我正在尝试更新一些来自Web Api服务(PUT)请求的数据。数据(票证)正确传递,并反序列化为对象(票证)。
当我尝试更新时,我使用以下代码:
public Ticket UpdateTicket(Ticket ticket)
{
using (var ctx = new SupportTicketContext(_connectionString))
{
ctx.Entry(ticket).State = EntityState.Modified;
ctx.SaveChanges(); // <== **BLOWS UP HERE**
var result = ctx.Tickets
.First(t => t.TicketId == ticket.TicketId);
return result;
}
}
该代码引发以下错误:
数据库操作预期会影响1行,但实际上影响0行。数据
实体加载后可能已被修改或删除
ctx.Attach(ticket);
但这无济于事。
如何获得成功更新数据库的信息?
关于如何调试的任何想法?日志记录似乎很难设置。
任何想法表示赞赏。
请您参考如下方法:
对我来说,我犯了两个愚蠢的错误。首先,我尝试在不指定DbSet的情况下调用Update()方法:
_applicationDbContext.Update(user);
正确方法:
_applicationDbContext.Users.Update(user);
第二个同样愚蠢的错误是试图更新模型,而没有先从数据库中将其提取出来:
public bool UpdateUser(IdentityUser model)
{
_applicationDbContext.Users.Update(model);
_applicationDbContext.SaveChanges();
return true;
}
不。
我首先需要从数据库中检索它,然后对其进行更新:
public bool UpdateUser(IdentityUser model)
{
var user = _applicationDbContext.Users.FirstOrDefault(u => u.Id == model.Id);
user.PhoneNumberConfirmed = model.PhoneNumberConfirmed;
_applicationDbContext.Users.Update(user);
_applicationDbContext.SaveChanges();
return true;
}