Вот фрагмент, который у меня есть .. Надеюсь, это поможет.Теперь, когда я смотрю на это, я думаю, что мог бы улучшить и это.
_qualifiedTypeName = _context.DefaultContainerName + "." + _baseTypeName;
Type baseType = GetBaseType(typeof(T));
_baseTypeName = baseType.Name.ToString();
PropertyInfo[] entityProperties = baseType.GetProperties();
List<string> keyList = new List<string>();
foreach (PropertyInfo prop in entityProperties)
{
object[] attrs = prop.GetCustomAttributes(false);
foreach (object obj in attrs)
{
if (obj.GetType() == typeof(EdmScalarPropertyAttribute))
{
EdmScalarPropertyAttribute attr = (EdmScalarPropertyAttribute)obj;
if (attr.EntityKeyProperty) keyList.Add(prop.Name);
}
}
}
if (keyList.Count > 0)
{
_keyName = keyList[0];
}
, а затем вы вернете его как:
EntityKey key = new EntityKey(_qualifiedTypeName, _keyName, id);
return (T)_context.GetObjectByKey(key);
и похоже, что я получил выше здесь: http://blog.vascooliveira.com/how-to-check-for-an-entity-objects-entitykey-properties/