gpt4 book ai didi

entity-framework-core-2.1 - Entity Framework 核心:数据库操作预期会影响1行,但实际上影响0行

转载 作者:行者123 更新时间:2023-12-02 02:47:39 26 4
gpt4 key购买 nike

我正在具有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;
    }

    关于entity-framework-core-2.1 - Entity Framework 核心:数据库操作预期会影响1行,但实际上影响0行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676084/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com