Konversi DBContext dari ObjectContext

Saya menggunakan fungsi ini di EntityFramework 4.0 (ObjectContext). Sekarang saya menggunakan EF 5.0. Masalah saya adalah DefaultContainerName,GetObjectByKey metode tidak ditemukan di 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);
        }

Bagaimana cara mengubah fungsi ini?

Atau bagaimana cara membuat fungsi seperti ini?


person ebattulga    schedule 19.11.2012    source sumber


Jawaban (1)


DbContext adalah adaptor (pembungkus) atas ObjectContext. Juga mengimplementasikan antarmuka IObjectContextAdapter secara eksplisit. Transmisikan Anda dbContext ke tipe antarmuka ini dan instance ObjectContext yang dibungkus akan tersedia:

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

BTW kelas baru DbSet<T> memiliki metode Find yang juga mencari entitas berdasarkan kunci. Jadi, sepertinya semua kode Anda sekarang akan terlihat seperti itu

T entity = dbContext.Set<T>().Find(id);
person Sergey Berezovskiy    schedule 19.11.2012