También es posible sin reflexión:
using (var context = new ModelContainer())
{
// Access CSDL
var container = context.MetadataWorkspace
.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
// Access name of related set exposed on your context
var set = container.BaseEntitySets[context.YourEntitySet.EntitySet.Name];
// Access all properties
var properties = set.ElementType.Members.Select(m => m.Name).ToList();
// Access only keys
var keys = set.ElementType.KeyMembers.Select(m => m.Name).ToList();
}
Como se puede ver que tiene acceso a mucho más que nombres. El ejemplo muestra que ahora puede qué propiedad es parte de la clave. Si accede directamente al Members
, puede saber qué propiedad es escalar, de tipo complejo o de navegación.
Toda la información ya está cargada, por lo que no hay necesidad de reflexión. Si desea utilizar la reflexión, no olvide utilizarla solo una vez (la primera vez que la necesite) y luego almacenar y reutilizar los nombres de las propiedades recibidas. La reflexión es lenta, así que usarla cada vez que necesitas nombres es una mala práctica.
Entonces, ¿está recibiendo todo lo que necesita además de "EntityKey" y "EntityState" o son esos dos los únicos que recibirá? –
@Bala R: obtengo todo más lo que mencioné – Dabbas