Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get the EntitySet name from an EntityType in EF

Given an EntityType, such as "Contact", how can I derive from it the name of the EntitySet it would belong to, i.e. the pluralization such as "Contacts"?

like image 782
CodeGrue Avatar asked Apr 21 '10 20:04

CodeGrue


2 Answers

If you already have an attached entity (obviously you don't need the first line, just use your existing entity):

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

Or if you don't:

 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();
like image 99
Nix Avatar answered Oct 13 '22 01:10

Nix


This extension may be useful

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

And use it like:

db.AttachTo(db.GetEntitySetName<MyEntityType>(), myEntityInstance);
like image 33
Juan Carlos Puerto Avatar answered Oct 13 '22 02:10

Juan Carlos Puerto