การแปลง DBContext จาก ObjectContext

ฉันใช้ฟังก์ชันนี้ใน EntityFramework 4.0 (ObjectContext) ตอนนี้ผมใช้ EF 5.0 ปัญหาของฉันคือไม่พบวิธีการ DefaultContainerName,GetObjectByKey ใน 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);
        }

จะแปลงฟังก์ชันนี้ได้อย่างไร?

หรือจะสร้างฟังก์ชั่นแบบนี้ได้อย่างไร?


person ebattulga    schedule 19.11.2012    source แหล่งที่มา


คำตอบ (1)


DbContext เป็นอะแดปเตอร์ (ตัวห่อหุ้ม) ที่อยู่เหนือ ObjectContext นอกจากนี้ยังใช้อินเทอร์เฟซ IObjectContextAdapter อย่างชัดเจน ส่ง dbContext ของคุณไปยังอินเทอร์เฟซประเภทนี้และอินสแตนซ์ที่ห่อไว้ ObjectContext จะพร้อมใช้งาน:

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

BTW คลาสใหม่ DbSet<T> มีเมธอด Find ซึ่งค้นหาเอนทิตีด้วยคีย์ด้วย ดูเหมือนว่าโค้ดทั้งหมดของคุณจะมีลักษณะเช่นนี้

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