Я пытаюсь найти способ получить имя базовой таблицы SQL для данного типа сущности. Я экспериментировал с запросами MetadataWorkspace, и хотя я могу получить много информации из объекта или из пространства хранения, я не могу понять, как сопоставить их.
Скажем, у меня есть тип в объектной модели, который называется Lookup - как мне найти имя таблицы (wws_lookups) в базе данных?
Я могу запросить все объекты EntityType для CSpace и SSpace, и я могу видеть оба списка правильно, но я не могу понять, как получить SSpace из CSpace.
Есть какой-либо способ сделать это?
Я использую подход Найджела (извлечение имени таблицы из .ToTraceString()
), но с некоторыми изменениями, потому что его код не будет работать, если таблица не находится в схеме SQL Server по умолчанию ( dbo.{table-name}
)
Я создал методы расширения для DbContext
и 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\s+(?<table>.+)\s+AS");
Match match = regex.Match(sql);
string table = match.Groups["table"].Value;
return table;
}
}
Подробнее здесь:
Entity Framework: получить имя сопоставленной таблицы от объекта