当前位置: 首页 > 知识库问答 >
问题:

更新数据库条目MVC实体框架

祖浩淼
2023-03-14

我有一个带有“Status”布尔值的付款模型,该布尔值默认为false。付款后,我需要将特定付款的“状态”更新为true。

这是我一直试图用来更改特定数据库条目的代码,但它并没有改变它。我做错了什么?

Payment payment = new Payment();
payment = db.Payments.Find(orderId);
db.Entry(payment).State = EntityState.Modified;
payment.Status = true;
db.SaveChanges();

谢谢

这就是最终起作用的原因:

using (var con = new ApplicationDbContext())
{
    payment = con.Payments.First(x => x.Id == orderId);
    payment.Status = true;

    con.Payments.Attach(payment);
    var entry = con.Entry(payment);
    entry.Property(e => e.Status).IsModified = true;
    con.SaveChanges();
}

共有3个答案

夏英发
2023-03-14

如果你只有你的实体id,就像阿里·戈尔沙尼说的那样。但是,如果您已经拥有实体并且只想更新,则可以这样做:

 public void Update(Payment payment, int orderId)
    {
        //first find the entity to update
        Payment oldEntity = DbSet.Find(orderId);

        //detach this entity from the DbSet
        Db.Entry(oldEntity).State = EntityState.Detached;

        //set the state from the entity that you just received to modified 
        Db.Entry(obj).State = EntityState.Modified;
    }

分离避免了错误消息:“附加实体失败,因为另一个相同类型的实体已经具有相同的主键值”。

我希望它能有所帮助。

鲜于渊
2023-03-14

所有这些都失败的原因是,要么付款对象从未附加到DBContext,要么orderId实际上与Payments表上的PK不匹配。为了使SaveChanges()真正起作用,您正在更改的对象需要由DBContext跟踪,而不仅仅是将其实体状态设置为“已修改”。此外,所有这些例子似乎都过于复杂。

using (var db = new DbContext())
{
    // make sure you have the right column/variable used here
    var payment = db.Payments.FirstOrDefault(x => x.Id == orderId);

    if(payment == null) throw new Exception("Invalid id: " + orderId);

    // this variable is tracked by the db context
    payment.Status = true;

    db.SaveChanges();
}
伍溪叠
2023-03-14
Payment payment = new Payment();
payment = db.Payments.Find(orderId);
payment.Status = true;
db.Entry(payment).State = EntityState.Modified;
db.SaveChanges();
 类似资料:
  • 问题内容: 在这些多重性冲突中,我所看到的大多数其他问题都是代码优先的,而我将DB作为第一位。我进行了一些模式更改,并且从数据库刷新模型时出现以下错误: 多重性与关系“ FK_MarketSelectionWager_Bet”中的角色“赌注”中的引用约束冲突。由于从属角色中的所有属性都是不可为空的,因此,主体角色的多重性必须为“ 1”。 我需要在SQL或模型中进行修复的任何指针都很棒。 以下是涉及

  • 我曾想过简单地对数据库运行一个小命令并捕获任何异常,然而,如果出现问题(例如app.config丢失或数据库服务器关闭),应用程序将花费大量时间运行此代码,然后抛出异常(大约1分钟)。我想这是由于连接超时等,但我已经摆弄了这样的属性没有任何作用。 有没有人能提供任何关于去哪里的建议?

  • 场景: 我有两个MySQL数据库: 大型主数据库 小型客户端数据库 示例表: 大数据库用户: 文本用户名 int id varchar登录 varchar密码 ...更多的领域 客户端数据库用户 内部id int UNIQUE api\u id(来自master的id) varchar登录 varchar密码 问题:我需要同步数据库,但我不知道如何以最佳方式进行同步。我读过这个问题,但它很老了,没

  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?

  • 下载url来自一个单独的图像选择方法,顺便说一句。我的用户创建代码是这样的。

  • 我正在使用Spring框架配置一个简单的JPA应用程序。我的目标是在JUnit测试运行期间用数据填充db。我明白这并不理想。但我想要它有不同的用途。 下面是我的 test-context.xml