我有一个大型模型,它已通过反序列化进行了部分更新。由于它只进行了部分更新,因此我想在将其传递给我的 Entity Framework 更新时忽略任何空值。最终 EntityState.Modified
已设置,但我遇到的问题是所有字段都已更新。这意味着任何为空的内容现在都在数据库中被清空。
是否可以通过设置或覆盖方法来检查 null 来更改此默认行为?似乎由于上下文需要完整的模型,所以我不能简单地只设置几个值。
我已经通过仅映射我需要修改的内容并发生了相同的行为来验证了这一点。
最佳答案
你可以实现这样的东西。
在这种情况下,我使用带有反射的通用存储库来遍历属性并在更新方法中排除空值。
public virtual TEntity Update(TEntity entity)
{
dbSet.Attach(entity);
dbContext.Entry(entity).State = EntityState.Modified;
var entry = dbContext.Entry(entity);
Type type = typeof(TEntity);
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.GetValue(entity, null) == null)
{
entry.Property(property.Name).IsModified = false;
}
}
dbContext.SaveChanges();
return entity;
}
关于c# - 忽略上下文更新中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712453/