7

Attualmente stiamo utilizzando il metodo seguente che dipende da IObjectContextAdapter in un repository astratto. Da quello che sto leggendo, sembra che qualsiasi cosa relativa a ObjectContext sia stata tagliata da Entity Framework Core. Il metodo seguente è l'unico posto in cui dipendiamo da qualsiasi cosa relativa a ObjectContext.Come ottenere il valore della chiave primaria con Entity Framework Core

Vorremmo eseguire l'aggiornamento a Entity Framework Core. Questo è il nostro unico blocco stradale. C'è un modo per ottenere il valore della chiave primaria di un'entità con gli apis di Entity Framework Core?

// 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); 
} 

risposta

12

Ho anche di fronte a problemi simili ed ho trovato la seguente soluzione

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

grazie per questa risposta. Sembra che dovrebbe funzionare. Al momento non parteciperò a questo progetto, ma mi aspetto di tornare su questo punto nel prossimo futuro. Lo proverò appena posso. – cResults

+0

è il Context.Model aggiunto in EF7? Sto provando il cambiamento in un ambiente EF6, ma si rompe perché quella proprietà non esiste. – cResults

+0

Sì, questa è la proprietà EF7 (Core) – YuriyP

Problemi correlati