Código EF primero: Configuración del modelo
-
25-10-2019 - |
Pregunta
Intentaré ser lo más claro posible:
Mi objetivo: leer la configuración del modelo que declaré en mi anulación OnModelCreating
Dentro de mi clase de entidad derivada de DbContext
.
Razón: construir un genérico void Update<T>(T toUpdate)
Método en mi capa de datos, donde obtengo qué campos son la clave principal para T, recuperarlos en la aprobación toUpdate
objeto y úselos en el Set<T>().Find
método.
Esto me permitiría no codificar la lógica para cada tipo de entidad que manejo.
Necesito recuperar la entidad almacenada para aplicar actualizaciones, como esta:
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues);
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
Estoy atrapado en el punto de que en mi _entities
instancia (que es mi clase de entidades derivada de DbContext
Por supuesto) parece que no puedo encontrar dónde se almacena la configuración del modelo.
¿Alguien puede señalarme en la dirección correcta?
Gracias.
Solución
Puede encontrar el código sobre cómo recuperar los nombres clave de propiedades de un tipo de entidad YourEntity
aquí:
Código de marco de entidad primero. Encuentra la clave primaria
Y luego recupere los valores:
public Update<T>(T toUpdate)
{
// Code from link above with YourEntity = T
List<object> myRetrievedKeyValues = new List<object>();
foreach (var keyName in keyNames)
myRetrievedKeyValues.Add(toUpdate.GetType().GetProperty(keyName)
.GetValue(toUpdate, null));
var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues.ToArray());
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
}
Espere que tenga un bastante lento Update
Método porque debe usar la reflexión para este enfoque genérico.
Tampoco olvides que CurrentValues.SetValues
Solo actualizará propiedades escalares y complejas. No le ayuda a actualizar las propiedades de navegación. Tendrá que usar código no genérico para actualizar las relaciones que son específicas para cada tipo de entidad.