2012-11-19 4 views
5

Ich verwende diese Funktion in EntityFramework 4.0 (ObjectContext). Jetzt benutze ich EF 5.0. Mein Problem DefaultContainerName ist, GetObjectByKey Methoden nicht gefunden in DBContextDBContext Konvertierung von ObjectContext

public static T GetObjectByID<T>(int ID, string tableName = "") 
     { 
      var localDB = new LocalBaseEntities(); 

      string entitySetName = string.Format("{0}.{1}", localDB.DefaultContainerName, string.IsNullOrEmpty(tableName) ? typeof(T).Name + "s" : tableName); 

      try 
      { 
       IEnumerable<KeyValuePair<string, object>> entityKeyValues = 
       new KeyValuePair<string, object>[] { new KeyValuePair<string, object>(typeof(T).Name + "ID", ID) }; 
       EntityKey key = new System.Data.EntityKey(entitySetName, entityKeyValues);    
       return (T)localDB.GetObjectByKey(key); 
      } 
      catch (Exception) 
      { }    

      return default(T); 
     } 

Wie diese Funktion konvertieren?

Oder wie funktioniert man so?

Antwort

15

DbContext ist ein Adapter (Wrapper) über ObjectContext. Außerdem implementiert es explizit die Schnittstelle IObjectContextAdapter. Cast Sie an diese Schnittstelle Typ DbContext und wickelte ObjectContext Instanz zur Verfügung stehen wird:

ObjectContext context = ((IObjectContextAdapter)dbContext).ObjectContext; 

BTW neue Klasse DbSet<T> hat Methode Find die auch Einheiten von Schlüssel sucht. Es sieht so aus, als ob Ihr Code jetzt wie folgt aussehen würde:

T entity = dbContext.Set<T>().Find(id); 
+1

Vielen Dank. Begrüße die Antwort – ebattulga