To get database table name on Entity framework 4.0 I do:
ObjectSetInstance.EntitySet.ToString()
Is there a way to do this on Entity Framework 4.1?
To get database table name on Entity framework 4.0 I do:
ObjectSetInstance.EntitySet.ToString()
Is there a way to do this on Entity Framework 4.1?
Extension methods for DbContext and ObjectContext:
public static class ContextExtensions
{
public static string GetTableName<T>(this DbContext context) where T : class
{
ObjectContext objectContext = ((IObjectContextAdapter) context).ObjectContext;
return objectContext.GetTableName<T>();
}
public static string GetTableName<T>(this ObjectContext context) where T : class
{
string sql = context.CreateObjectSet<T>().ToTraceString();
Regex regex = new Regex("FROM (?<table>.*) AS");
Match match = regex.Match(sql);
string table = match.Groups["table"].Value;
return table;
}
}
Using a ObjectContext object:
ObjectContext context = ....;
string table = context.GetTableName<Foo>();
Using a DbContext object:
DbContext context = ....;
string table = context.GetTableName<Foo>();
More info here:
You can apply extension method to get Table name from your entity class
In this case, You wont need DbContext to get table name , it gets it inside extension method
public static string GetTableName<T>(this T entity) where T : class
{
var object_context = GetObjectContext(entity);
if (object_context == null || object_context.TransactionHandler == null)
return null;
var dbcontext=object_context.TransactionHandler.DbContext;
var query= dbcontext.Set(entity.GetType()).ToString();
var reg = new Regex(@"FROM \[dbo\]\.\[(?<table>.*)\] AS");
var match = reg.Match(query);
var tableName= match.Groups["table"].Value;
return tableName;
}
private static ObjectContext GetObjectContext(object entity)
{
var field = entity.GetType().GetField("_entityWrapper");
if (field == null)
return null;
var val= field.GetValue(entity);
var property = val.GetType().GetProperty("Context");
var context = (ObjectContext)property.GetValue(val, null);
return context;
}
This is where we reach to DbContext:
var object_context = GetObjectContext(entity)
Usage:
var tableName = entity.GetTableName();