在此示例中,如何强制 EF 仅更新 Db 中的一列?

Posted

技术标签:

【中文标题】在此示例中,如何强制 EF 仅更新 Db 中的一列?【英文标题】:How to Enforce EF to update only one column in the Db in this example? 【发布时间】:2013-12-12 18:54:19 【问题描述】:

我想要实现的是只更新数据库中实体的特定属性。 (模仿 UPDATE Foo Set Status = 'kool' WHERE ID = 99 之类的东西)。

我试试这个:

    public void SetFooStatus(Foo foo)
            

                var fooToUpdate = new Foo()
                
                    Id = foo.Id,
                    Status =foo.Status
                ;

                this.Context.Foos.Attach(fooToUpdate);

                this.Context.Entry(fooToUpdate).Property("Status").IsModified = true;

                this.Context.ValidateOnSaveEnabled = false;

                this.dbSet.Attach(entityToUpdate); // This is IDbSet<Foo>
                this.dbSet.Entry(entityToUpdate).State = EntityState.Modified;

                this.dbSet.SaveChanges();

            

问题是当我将 State 设置为 EntityState.Modified 时,所有属性都标记为 Chagned -IsModified 返回 true-。

当我将其注释掉时,更新未完成 - Db 中不会发生任何更改。

问题: 如何强制 EF 仅更新 foo 对象的 Status 属性而不触及 Db 中的其他字段?

【问题讨论】:

【参考方案1】:

EF 不允许更新单个列。您可能希望从服务器获取它而不是附加实体,这会将所有字段设置为您在服务器上拥有的值,因此您不会更改其他属性。您可能想使用DbSet.Find() 方法,该方法将尝试在上下文中通过其 id 查找实体,如果不存在则从数据库中获取它。

【讨论】:

以上是关于在此示例中,如何强制 EF 仅更新 Db 中的一列?的主要内容,如果未能解决你的问题,请参考以下文章

SELECT DISTINCT 仅用于 Google 表格查询中的一列

如何仅过滤dataTable angular中的一列[重复]

如何使用swift 3仅获取Core Data中的一列数据

如何仅在 QTableWidget 的一列中添加一行?

EF Core Model更新迁移

如何更新php sql中的一列(点)[重复]