我正在具有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行。数据
实体加载后可能已被修改或删除

  • 我能够插入数据库并从数据库中获取数据,没问题。
  • 如果我重新启动Visual Studio,则该错误通常在我第二次尝试更新ANY票证时发生(即,任何其他ticketId-似乎在第二个及后续请求中)。
  • 更新异常成功!有时,我可以更新另一张票证,并且该票证会通过(即使在第三个请求或后续请求中)
  • 我尝试对代码进行许多修改,包括

    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; 
        } 
    


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!