7

Obecnie używamy poniższej metody, która zależy od IObjectContextAdapter w abstrakcyjnym repozytorium. Z tego, co czytam, wynika, że ​​wszystko co związane z ObjectContext jest wycinane z Entity Framework Core. Poniższa metoda jest jedynym miejscem, w którym polegamy na czymkolwiek związanym z ObjectContext.Jak uzyskać wartość klucza podstawowego za pomocą Entity Framework Core

Chcielibyśmy dokonać aktualizacji do Entity Framework Core. To jest nasz jedyny blok drogowy. Czy istnieje sposób na uzyskanie wartości klucza podstawowego jednostki z 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); 
} 

Odpowiedz

12

ja też do czynienia z podobnym problemem i znalazł następujące rozwiązanie

// 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

Dzięki za tą odpowiedź. Wygląda na to, że powinno działać. W tej chwili nie jestem w tym projekcie, ale spodziewam się, że wrócę do tego w najbliższej przyszłości. Wypróbuję to tak szybko, jak będę mógł. – cResults

+0

to Context.Model dodany w EF7? Próbuję zmiany w środowisku EF6, ale zerwanie, ponieważ ta właściwość nie istnieje. – cResults

+0

Tak, jest to własność EF7 (Core) – YuriyP