我想使用泛型类在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()。
答案 0 :(得分:5)
假设您要将值从entity
设置为currentEntity
(否则,请使用相反的方法)。
propertiesFromCurrentEntity[i].SetValue(
currentEntity, propertiesFromNewEntity[i].GetValue(entity, null), null);
答案 1 :(得分:0)
要在拥有PropertyInfo
对象时获取或设置值,您必须使用其SetValue
和GetValue
方法。