我有一个
object elementToUpdate;
我希望在我的DbContext中更新它。
这似乎是一个很好的起点
public void Update<TEntity>(TEntity entity)
{
DbContext.Set<TEntity>().Attach(entity);
DbContext.Entry(entity).State = EntityState.Modified;
DbContext.SaveChanges();
}
解释here
我的问题是,我无法正确地投射elementToUpdate
。我知道它的名称作为字符串的精确类型(例如"MyEntityType"
)但我不知道如何使用反射来投射 - 或者换句话说如何插入类型参数
DbContext.Set<MyEntityType>()
来自字符串
"MyEntityType"
感谢您的帮助。
答案 0 :(得分:2)
您始终可以使用非通用版本的DbContext.Set
:
DbContext.Set(ObjectContext.GetObjectType(entity.GetType()))
您不能仅使用entity.GetType()
,因为它可以是代理。这就是System.Data.Entity.Core.Objects.ObjectContext
需要的原因。
答案 1 :(得分:0)
使用其他Set
重载,这不是通用的,并接受实体类型作为输入,假设您具有对象类型的程序集限定名称(如果类型在当前正在执行程序集,由其名称空间限定的类型名称就足够了):
public void Update(object entity, string typeName)
{
var type = Type.GetType(typeName);
DbContext.Set(type).Attach(entity);
DbContext.Entry(entity).State = EntityState.Modified;
DbContext.SaveChanges();
}