1: public static class ObjectContextExtensions
2: {
3: public static Object Load(this ObjectContext ctx, Type type, params Object [] ids)
4: {
5: Object p = null;
6:
7: EntityType ospaceType = ctx.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace).SingleOrDefault(x => x.FullName == type.FullName);
8:
9: List<String> idProperties = ospaceType.KeyMembers.Select(k => k.Name).ToList();
10:
11: List<EntityKeyMember> members = new List<EntityKeyMember>();
12:
13: EntitySetBase collection = ctx.MetadataWorkspace.GetEntityContainer(ctx.DefaultContainerName, DataSpace.CSpace).BaseEntitySets.Where(x => x.ElementType.FullName == type.FullName).Single();
14:
15: for (Int32 i = 0; i < ids.Length; ++i)
16: {
17: members.Add(new EntityKeyMember(idProperties[i], ids[i]));
18: }
19:
20: EntityKey key = new EntityKey(String.Concat(ctx.DefaultContainerName, ".", collection.Name), members);
21:
22: if (ctx.TryGetObjectByKey(key, out p) == true)
23: {
24: return (p);
25: }
26:
27: return (p);
28: }
29:
30: public static T Load<T>(this ObjectContext ctx, params Object[] ids)
31: {
32: return ((T)Load(ctx, typeof(T), ids));
33: }
34: }