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

时间:2013-11-27 08:28:40

标签: c# sql-server-2008 entity-framework entity-framework-4.1 dbset

我想要实现的只是更新Db中实体的特定属性。 (模仿类似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 个答案:

答案 0 :(得分:0)

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