Учитывая EntityType, например "Контакт", как я могу получить от него имя EntitySet, к которому он принадлежит, т.е. плюрализация, такая как "Контакты"?
Получить имя EntitySet из EntityType в EF
Ответ 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);