5

我在 EntityFramework 4.0 (ObjectContext) 中使用这个函数。现在我使用的是 EF 5.0。我的问题是DefaultContainerNameGetObjectByKey找不到方法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);
        }

如何转换这个函数?

或者如何制作这样的功能?

4

1 回答 1

15

DbContext是一个适配器(包装器)ObjectContext。它还显式地实现了 interface IObjectContextAdapter。将您的 dbContext 转换为此接口类型,并且包装的ObjectContext实例将可用:

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

顺便说一句,新类DbSet<T>的方法Find也可以通过键搜索实体。所以,看起来你所有的代码现在看起来像

T entity = dbContext.Set<T>().Find(id);
于 2012-11-19T14:27:44.053 回答