2013-09-12 2 views
3

ObjectContext.GetObjectType Method должен вернуть «тип объекта в сущности POCO, связанной с прокси-объектом указанного типа»ObjectContext.GetObjectType (e.GetType()) не возвращает тип объекта в сущности POCO

Так как пришел в мой код, он просто возвращает прокси?

Я использую Рамочный Entity 6 предвыпускную

 //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"; 
+0

Что вы получаете, когда вы вызываете 'ObjectContext.GetKnownProxyTypes()' после вашей первой строки? – haim770

ответ

16

Вы используете неправильный ObjectContext. EF6 не построен на System.Data.Entity.dll. Вы должны использовать ObjectContext из EntityFramework.dll. На самом деле не рекомендуется иметь ссылку на System.Data.Entity.dll в вашем проекте вообще, если вы используете EF6, чтобы избежать подобной ситуации.

Чтобы устранить проблему:

  • удалить ссылку на System.Data.Entity.dll (на всякий случай)
  • заменить System.Data.Objects.ObjectContext.GetObjectType(e.GetType()); с System.Data.Entity.Core.Objects.ObjectContext.GetObjectType(e.GetType())