如何在EF ObjectContext中更新泛型实体的属性

本文关键字:泛型 实体 属性 更新 EF ObjectContext | 更新日期: 2023-09-27 18:21:13

我想使用泛型类在ObjectContext中创建一个泛型更新方法。我需要循环所有属性,并在传递给我的泛型更新方法的泛型实体中更新它们。更新方法:

public void Update(T entity)
{
    if (entity == null)
    {
        throw new ArgumentNullException("entity");
    }
    var propertiesFromNewEntity = entity.GetType().GetProperties();
    // I've a method that return a entity by Id, and all my entities inherits from
    // a AbstractEntity that have a property Id.
    var currentEntity = this.SelectById(entity.Id).FirstOrDefault();
    if (currentEntity == null)
    {
        throw new ObjectNotFoundException("The entity was not found. Verify if the Id was passed properly.");
    }
    var propertiesFromCurrentEntity = currentEntity.GetType().GetProperties();
    for (int i = 0; i < propertiesFromCurrentEntity.Length; i++)
    {
        propertiesFromCurrentEntity.SetValue(propertiesFromNewEntity.GetValue(i), i);
    }
}

但这不起作用,因为属性是按值传递的,对吧?那么,有一种方法可以修改当前的实体属性吗?

OBS:在更新、插入和删除方法之后,我的框架调用myContext.SaveChanges().

如何在EF ObjectContext中更新泛型实体的属性

假设要设置从entitycurrentEntity的值(否则,只需使用相反的方法)。

propertiesFromCurrentEntity[i].SetValue(
    currentEntity, propertiesFromNewEntity[i].GetValue(entity, null), null);

要在有PropertyInfo对象时获取或设置值,必须使用它们的SetValueGetValue方法。