Getting name of specific linq to sql table

c#, entity-framework, linq-to-sql, vb.net

Solution

I am not sure if this works for EF, but I use this approach in Linq to Sql.

You'll have to use attributes from `System.Data.Linq.Mapping` namespace. If you open the `*.designer.cs` file, containing the definition of any Linq to Sql entity, you'll find a line like this above the declaration of the class:

[global::System.Data.Linq.Mapping.TableAttribute(Name="YourTableName")]

So each entity class in Linq to Sql is marked with the `TableAttribute` attribute and it's `Name` property contains the name you need. We may use this:

public static string GetTableName<TEntity>(this Table<TEntity> MyTable) 
                            where TEntity : class
{
    Type type = typeof(TEntity);
    object[] temp = type.GetCustomAttributes(
                           typeof(System.Data.Linq.Mapping.TableAttribute), 
                           true);
    if (temp.Length == 0)
        return null;
    else
        return (temp[0] as System.Data.Linq.Mapping.TableAttribute).Name;
}

Problem

I am using Linq to SQL to manipulate and MS Access database. To speed up batch modifications I found it more efficient to directly execute queries using the datacontext, like so `context.ExecutCommand("DELETE FROM [MyTable];")`. For the sake of efficiency I'd like to make this an extension method, but I don't know how to retrieve the table name from the context... I know I could just pass the table name as a hardcoded string, something like: ``` public static void DeleteAll(this Table<TEntity> MyTable) { string tableName = // retrieve MyTable's name MyTable.Context.ExecuteCommand(string.Format("DELETE FROM [{0}];", tableName)); } ``` I got some way towards getting the table name, but need some help to get thsi working. So far I have: ``` var tableName = dc.MyTables.Context.GetTable(typeof(MyTable)).ElementType.Name; ``` But can't figure out how to retrieve the type of the entities in `MyTables` so as not have to hardcode the argument of `.GetTable()` and make this usable for any table I pass in. Any answer in C# or VB is fine. Thanks. EDIT To summarise what I am looking for is a way to get the entity type of a table, from the table itself. Something like `Context.MyTable.GetEntityType()`... if only it were that easy.

Original source