Подтвердить что ты не робот

Получить имя EntitySet из EntityType в EF

Учитывая EntityType, например "Контакт", как я могу получить от него имя EntitySet, к которому он принадлежит, т.е. плюрализация, такая как "Контакты"?

4b9b3361

Ответ 1

Если у вас уже есть прикрепленный объект (очевидно, вам не нужна первая строка, просто используйте существующую сущность):

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

Или, если вы этого не сделаете:

 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();

Ответ 2

Это расширение может быть полезно

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

И используйте его как:

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