Учитывая объект, я хотел бы получить первичные ключи связанных объектов в общем виде. Например: для Клиента я хотел бы иметь список идентификаторов его ордеров.Общий способ получения первичных ключей из свойств навигации
Текущая подпись моей попытки:
GetPrimaryKeysOfRelatedEntities(DbContext db, object entity)
Я могу получить рК сущности, и я в состоянии получить навигационные свойства объекта ... но я не могу получить PK навигационных свойств объекта.
У меня отсутствует небольшая ссылка здесь!
Вот мой код, чтобы получить ключи сущностей, которые не работают для навигационных свойств
private static IEnumerable<string> GetEntityType(DbContext db, Type entityType)
{
entityType = ObjectContext.GetObjectType(entityType);
var metadataWorkspace = ((IObjectContextAdapter)db).ObjectContext.MetadataWorkspace;
var objectItemCollection = (ObjectItemCollection)metadataWorkspace.GetItemCollection(DataSpace.OSpace);
ReadOnlyCollection<EntityType> entityTypes = metadataWorkspace.GetItems<EntityType>(DataSpace.OSpace);
if (entityTypes == null)
{
throw new InvalidOperationException();
}
var ospaceType = entityTypes.SingleOrDefault(t => objectItemCollection.GetClrType(t) == entityType);
if (ospaceType == null)
{
throw new ArgumentException(
string.Format("The type '{0}' is not mapped as an entity type.", entityType.Name), "entityType");
}
return ospaceType.KeyMembers.Select(k => k.Name);
}
Этот код использует EntityType, и я Propably должен использовать что-то другое, но я не уверен, что.
Tnx для вашего ответа. С вашим кодом я могу получить имя идентификатора свойства навигации, но не его значение. Когда я пытаюсь получить entityEntry, используя Context.Entry (entity), он терпит неудачу. Я борюсь с передачей правильного типа. – Jowen
Jowen, если вам нужно значение, которое вы можете получить от объекта, выполните следующие действия: navEntity = prop.GetValue (объект, null), а затем Context.Entry (navEntity). Или я что-то неправильно понимаю? – Tony
Возможно, это так просто, как вы думаете, но я все еще не могу заставить его работать. Я получаю сообщение об ошибке при попытке заполнить navEntity. Это слишком много усилий, чтобы написать весь метод? Я бы очень признателен! – Jowen