c# - 忽略上下文更新中的空值

标签 c# .net entity-framework null entity-framework-5

我有一个大型模型,它已通过反序列化进行了部分更新。由于它只进行了部分更新,因此我想在将其传递给我的 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/

相关文章:

c# - 将参数传递给 Url.Action 方法有问题

c# - 如何在 ASP.NET 中动态创建新的超链接?

c# - Entity Framework : Efficiently grouping by month

c# - 在 Visual Studio 中突出显示泛型类型的语法

c# - 如何确定一个对象是否是实现公共(public)接口(interface)的对象的集合

c# - 传递3种不同数据类型来做同一件事的方法?

c# - 机器的 .net 核心 cpu 使用率

C# 是否可以更改 ListView 中的 e.Label 值

c# - 如何仅对 EF 中的列使用计数

.net - 验证对象是否已经在 Entity Framework 上下文中