从EF中的EntityType中获取EntitySet名称

entity-framework

给定EntityType,例如“Contact”,我如何从中获得它所属的EntitySet的名称,即“Contacts”之类的复数?

一般承认的答案

如果您已经有一个附加实体(显然您不需要第一行,只需使用您现有的实体):

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

热门答案

此扩展可能很有用

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


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因