【发布时间】: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