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