I'm use this function in EntityFramework 4.0 (ObjectContext). Now i'm using EF 5.0. My problem is DefaultContainerName,GetObjectByKey methods not found in 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);
}
How to convert this function?
Or how to make function like this?
DbContext is an adapter (wrapper) over ObjectContext. Also it implements explicitly interface IObjectContextAdapter. Cast you dbContext to this interface type and wrapped ObjectContext instance will be available:
ObjectContext context = ((IObjectContextAdapter)dbContext).ObjectContext;
BTW new class DbSet<T> has method Find which also searches entities by key. So, it seems all your code now will look like
T entity = dbContext.Set<T>().Find(id);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With