C# GetObjectType(e.GetType())不返回POCO实体的实体类型

C# GetObjectType(e.GetType())不返回POCO实体的实体类型,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,应返回“与指定类型的代理对象关联的POCO实体的实体类型” 那么为什么在我的代码中它只返回代理呢 我正在使用EntityFramework6发布候选版本 //Soft delete var e = Context.Set<T>().Find(id); e.IsDeleted = true; InsertOrUpdate(e); Type t = System.Data.Objects.ObjectCon

应返回“与指定类型的代理对象关联的POCO实体的实体类型”

那么为什么在我的代码中它只返回代理呢

我正在使用EntityFramework6发布候选版本

        //Soft delete
        var e = Context.Set<T>().Find(id);
        e.IsDeleted = true;
        InsertOrUpdate(e);

        Type t = System.Data.Objects.ObjectContext.GetObjectType(e.GetType());
        string name = t.Name;
        //Property_6C887DE7274181E6E99D6FCF2C21BDD59E226F99B0064F59954E70062C135331

        //Surely I shouldn't have to use Substring here?
        name = name.Substring(0, name.IndexOf("_")).ToSpacedTitleCase();
        string message = name + " deleted";
//软删除
var e=Context.Set().Find(id);
e、 IsDeleted=真;
插入更新(e);
类型t=System.Data.Objects.ObjectContext.GetObjectType(e.GetType());
字符串名称=t.名称;
//财产_6C887DE7274181E6E99D6FCF2C21BD59E226F99B0064F59954E70062C135331
//当然我不应该在这里使用子字符串?
name=name.Substring(0,name.IndexOf(“”).ToSpacedTitleCase();
字符串消息=名称+“已删除”;

您使用了错误的
ObjectContext
。EF6不是基于System.Data.Entity.dll构建的。您需要使用EntityFramework.dll中的
ObjectContext
。如果您使用EF6来避免这种情况,实际上根本不建议在项目中引用System.Data.Entity.dll

要解决您的问题,请执行以下操作:

  • 删除对System.Data.Entity.dll的引用(以防万一)
  • 替换
    System.Data.Objects.ObjectContext.GetObjectType(e.GetType())System.Data.Entity.Core.Objects.ObjectContext.GetObjectType(e.GetType())

在第一行之后调用
ObjectContext.GetKnownProxyTypes()
会得到什么?