从ObjectContext转换DBContext

时间:2012-11-19 14:24:25

标签: c# entity-framework .net-4.5 entity-framework-5

我在EntityFramework 4.0(ObjectContext)中使用此函数。现在我正在使用EF 5.0。我的问题是在DefaultContainerName

中找不到GetObjectByKeyDBContext种方法
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);
        }

如何转换此功能?

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

1 个答案:

答案 0 :(得分:15)

DbContextObjectContext上的适配器(包装器)。它还实现了显式接口IObjectContextAdapter。将dbContext转换为此接口类型,并且可以使用包装的ObjectContext实例:

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

BTW 新类DbSet<T>的方法Find也按键搜索实体。所以,现在你的所有代码看起来都像

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