Как обновить свойства универсального объекта в EF ObjectContext? - PullRequest
2 голосов
/ 24 января 2012

Я хотел бы создать универсальный метод обновления в 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 ().

Ответы [ 2 ]

5 голосов
/ 24 января 2012

Предполагается, что вы хотите установить значения от entity до currentEntity (в противном случае просто используйте обратное).

propertiesFromCurrentEntity[i].SetValue(
    currentEntity, propertiesFromNewEntity[i].GetValue(entity, null), null);
0 голосов
/ 24 января 2012

Чтобы получить или установить значение, когда у вас есть объект PropertyInfo, вы должны использовать их методы SetValue и GetValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...