【问题标题】:Can i update a non-nullable value in an Entity by using Update method from Entity Framework?我可以使用实体框架中的更新方法更新实体中的不可为空的值吗?
【发布时间】:2020-11-19 14:20:24
【问题描述】:

我已经创建了一个实体,但想更新一个不可为空的列的值。我使用 EF 的 Update 方法来尝试这个但不起作用。是否可以更新不可为空的值?

    public void Update(T entity)
    {
        _context.Set<T>().Update(entity);
    }

【问题讨论】:

  • Update 不与数据库对话。 DbContext 不是数据库连接。没有教程包含这样的代码。您是否尝试从不幸的文章或有关 EF 的问题中复制代码?试图实现存储库模式的文章?您应该首先了解一般的 ORM 和特别是 EF 的工作原理,而不是直接跳到实现
  • DbContext 不是连接。这是一个断开连接的工作单元。 DbSet 不是表,它是以断开连接的方式工作的存储库。 DbContext 收集对其控制的实体所做的所有修改,并在事务中调用SaveChanges 时将所有修改发送到数据库。在那之前,它甚至不保持与数据库的连接。这就是它快速、可扩展并为您提供交易语义而无需交易成本的原因。两者都没有损坏,也不需要修复或明确的Update 方法
  • @PanagiotisKanavos 当然,我在另一个地方使用 SaveChanges。但是应该可以更新不可为空的值吗?
  • 那你为什么要单独写一个Update呢?一个复制现有的?可空性与数据库更新有什么关系?此代码非常可疑,看起来像是试图“修复”未损坏的内容,并将存储库强加在 EF Core 之上。鉴于 DbSet 是存储库,而 DbContext 是包含多个存储库的 UoW,这试图扭转 EF 的工作方式并总是导致麻烦

标签: c# .net entity-framework .net-core asp.net-core-mvc


【解决方案1】:

只需添加 SaveChanges()

 public void Update(T entity)
{
    _context.Set<T>().Update(entity);
    _context.SaveChanges();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多