在实体框架

时间:2015-10-13 16:24:48

标签: c# entity-framework

我意识到在没有先选择实体的情况下更新实体是一个常见问题,并且StackOverflow上已经有很多解决方案,但是在阅读完之后我仍然遇到问题。

我使用以下代码更新用户权利:

  using (var context = GetContext())
  {
    var userEntity = new UserEntity() { ID = userUpdate.ID };
    context.Users.Attach(userEntity);
    context.Entry(userEntity).CurrentValues.SetValues(userUpdate);
    context.SaveChanges();
  }

但是这会导致DbEntityValidationException被抛出,因为我的用户权利具有一些必需的属性,但这些属性并不一定在更新的实体上设置。

有没有办法解决这个问题,还是仅仅是删除所需属性的情况?

谢谢!

2 个答案:

答案 0 :(得分:7)

我在这里找到了答案:Entity Framework/MVC3: temporarily disable validation

通过暂时禁用验证,我可以绕过检查并插入任意数量的值,而无需先检索所需的属性:

using (var context = GetContext())
{
  var userEntity = new UserEntity() { ID = userUpdate.ID };
  context.Users.Attach(userEntity);
  context.Entry(userEntity).CurrentValues.SetValues(userUpdate);

  // Disable entity validation
  context.Configuration.ValidateOnSaveEnabled = false;

  context.SaveChanges();
}

答案 1 :(得分:1)

如果您只想更新实体中的特定字段,而无需先从数据库中检索整个内容:

var userEntity = new UserEntity() { ID = userUpdate.ID };
userEntity.SomeProperty = userUpdate.SomeProperty;

//Tell EF to only update the SomeProperty value:
context.Entry(userEntity).Property(x => x.SomeProperty).IsModified = true;

context.SaveChanges();