使用Entity Framework仅更新数据库中的特定列

3
我有一个实体,我已经知道它存在于数据库中,但当前上下文没有跟踪它。我使用DbSet上的Attach方法强制上下文跟踪该实体。然后为必要的属性设置'IsModified'= true。但是EF试图更新数据库表中的每个属性,并且SaveChanges()方法抛出异常,指出某些属性是必需的,不能为空。尽管我只标记了一个属性作为修改过的。 我正在使用EF v.6.0。
以下是我的代码:
public bool ChangeState(int id, bool state)
    {
        try
        {
            var obj = new T {ID = id, Hidden = state};

            _context.Set<T>().Attach(obj);

            _context.Entry(obj).Property(x => x.Hidden).IsModified = true;
            return _context.SaveChanges() == 1;
        }
        catch (DbEntityValidationException dbEx)
        {
            ...
        }            
    }
}

你有什么想法吗?


EF的哪个版本? - user3559349
2
你可以尝试在“Attach”之前使用“_context.Configuration.ValidateOnSaveEnabled = false;”。 - user3559349
太好了,它运行得很好。谢谢你。不幸的是我没有足够的声誉来投票。 - mykhailovskyi
1个回答

2

好的,为了回答这个问题,我会在这里重复@Stephen Muecke的回答:


你可以尝试_context.Configuration.ValidateOnSaveEnabled = false; 请不要投票给我,功劳归@Stephen Muecke所有。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接