Obtenir le nom EntitySet à partir d'un EntityType dans EF

entity-framework

Question

Étant donné un type d'entité, tel que "Contact", comment puis-je en déduire le nom de l'entitySet auquel il appartiendrait, c'est-à-dire la pluralisation telle que "contacts"?

Réponse acceptée

Si vous avez déjà une entité attachée (vous n'avez évidemment pas besoin de la première ligne, utilisez simplement votre entité existante):

  Contact c = context.Contacts.Where(x => x.blah).FirstOrDefault();
  string setName = c.EntityKey.EntitySetName;

Ou si vous ne le faites pas:

 string className = typeof(Contact).Name
 var container =   
    context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
    string setName = (from meta in container.BaseEntitySets
                                          where meta.ElementType.Name == className
                                          select meta.Name).First();

Réponse populaire

Cette extension peut être utile

public static class MyExtensions
{
    public static string GetEntitySetName<T>(this ObjectContext context)
    {
        string className = typeof(T).Name;

        var container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
        string entitySetName = (from meta in container.BaseEntitySets
                                where meta.ElementType.Name == className
                                select meta.Name).First();

        return entitySetName;
    }
}

Et utilisez-le comme:

db.AttachTo(db.GetEntitySetName<MyEntityType>(), myEntityInstance);


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow