2012-01-24 2 views
2

Я хотел бы создать общий метод обновления в ObjectContext, используя общий класс. Мне нужно закодировать все свойства и обновить их на основе общего объекта, который я передаю моему универсальному методу обновления. Метод обновления:Как обновить свойства общего объекта в объекте ObjectContext EF?

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().

+1

Вы вызываете SetValue в массиве свойств ... Я не думаю, что это то, что вы намеревались делать;) –

ответ

5

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

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

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

Смежные вопросы