C# 如何在不知道确切类型的情况下更新DbContext中的实体?

C# 如何在不知道确切类型的情况下更新DbContext中的实体?,c#,.net,entity-framework,reflection,dbcontext,C#,.net,Entity Framework,Reflection,Dbcontext,我有一个 object elementToUpdate; 我想在DbContext中更新它 这似乎是一个很好的起点 public void Update<TEntity>(TEntity entity) { DbContext.Set<TEntity>().Attach(entity); DbContext.Entry(entity).State = EntityState.Modified; DbContext.SaveChanges(); }

我有一个

object elementToUpdate;
我想在DbContext中更新它

这似乎是一个很好的起点

public void Update<TEntity>(TEntity entity)
{
    DbContext.Set<TEntity>().Attach(entity);
    DbContext.Entry(entity).State = EntityState.Modified;
    DbContext.SaveChanges();
}
从字符串

"MyEntityType"

感谢您的帮助。

使用其他
Set
重载,该重载不是泛型的,并且接受实体类型作为输入,假设您具有对象类型的程序集限定名称(如果类型在当前执行的程序集中,则由其命名空间限定的类型名称就足够了):


始终可以使用非通用版本的
DbContext.Set

DbContext.Set(ObjectContext.GetObjectType(entity.GetType())


不能只使用
entity.GetType()
,因为它可以是代理。这就是为什么需要
System.Data.Entity.Core.Objects.ObjectContext

您的代码中是否有MyEntityType。如果有,您可以使用factory模式。您真的需要强制转换它,还是在编译时不知道类型?如果您只需调用
Update(elementToUpdate)
(在不指定
的情况下,它应该根据参数自动为模板选择正确的泛型类型。@linodeth,如果用
对象
装箱的实体,则该方法将被
tenty
调用,等于
对象
而不是所需的类型。我爱堆栈溢出,我爱你:)
"MyEntityType"
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();
}