我意识到在没有先选择实体的情况下更新实体是一个常见问题,并且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
被抛出,因为我的用户权利具有一些必需的属性,但这些属性并不一定在更新的实体上设置。
有没有办法解决这个问题,还是仅仅是删除所需属性的情况?
谢谢!
答案 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();