7

В настоящее время мы используем метод, который зависит от IObjectContextAdapter в абстрактном репозитории. Из того, что я читаю, кажется, что все, что связано с ObjectContext, измельчается из Entity Framework Core. Метод ниже - это единственное место, которое зависит от чего-либо, связанного с ObjectContext.Как получить значение первичного ключа в Entity Framework Core

Мы хотели бы перейти на платформу Entity Framework Core. Это наш единственный дорожный блок. Есть ли способ получить значение первичного ключа объекта с помощью Entity Framework Core apis?

// Entity Framework 
public virtual int GetKey(T entity) 
{ 
    var oContext = ((IObjectContextAdapter)_DbContext).ObjectContext; 
    var oSet = oContext.CreateObjectSet<T>(); 
    var keyName = oSet.EntitySet.ElementType 
           .KeyMembers 
           .Select(k => k.Name) 
           .Single(); 

    return (int)entity.GetType().GetProperty(keyName).GetValue(entity, null); 
} 

ответ

12

Я также столкнулся с подобной проблемой и нашел следующее решение

// Entity Framework Core 
public virtual int GetKey<T>(T entity) 
{ 
    var keyName = Context.Model.FindEntityType(typeof (T)).FindPrimaryKey().Properties 
     .Select(x => x.Name).Single(); 

    return (int)entity.GetType().GetProperty(keyName).GetValue(entity, null); 
} 
+0

спасибо за этот ответ. Похоже, он должен работать. На данный момент я не участвую в этом проекте, но я ожидаю, что вернусь к нему в ближайшем будущем. Я попробую, как только смогу. – cResults

+0

- это Context.Model, добавленный в EF7? Я пытаюсь изменить среду EF6, но ломаю, потому что этого свойства не существует. – cResults

+0

Да, это свойство EF7 (Core) – YuriyP