2012-11-19 6 views
5

私はEntityFramework 4.0(ObjectContext)でこの関数を使用しています。今私はEF 5.0を使用しています。私の問題は、この機能を変換する方法DBContextObjectContextからDBContextへの変換

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); 
     } 

では見られないDefaultContainerNameGetObjectByKey方法ですか?

またはこのように機能させるにはどうすればよいですか?

答えて

15

DbContextは、ObjectContextを超えるアダプタ(ラッパー)です。また、明示的にインタフェースIObjectContextAdapterを実装しています。あなたは、このインターフェイスタイプにdbContextとObjectContextインスタンスが利用できるようになります包まれた出演:

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

ところで新しいクラスDbSet<T>もキーでエンティティを検索する方法Findを持っています。だから、あなたのコードはすべて今のように見えます

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

ありがとう。挨拶する – ebattulga

関連する問題