如何在不知道确切类型的情况下更新 DbContext 中的实体?
How to update entities in the DbContext without knowing their exact Type?
我有一个
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"
感谢您的帮助。
使用其他 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();
}
您始终可以使用 DbContext.Set
的非通用版本:
DbContext.Set(ObjectContext.GetObjectType(entity.GetType()))
您不能只使用 entity.GetType()
,因为它可以作为代理。这就是 System.Data.Entity.Core.Objects.ObjectContext
需要的原因。
我有一个
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"
感谢您的帮助。
使用其他 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();
}
您始终可以使用 DbContext.Set
的非通用版本:
DbContext.Set(ObjectContext.GetObjectType(entity.GetType()))
您不能只使用 entity.GetType()
,因为它可以作为代理。这就是 System.Data.Entity.Core.Objects.ObjectContext
需要的原因。