ef code first: получить имя таблицы сущностей без dataannotations
Есть ли способ получить информацию о таблице, определенной с помощью DbModelBuilder?
что-то вроде:
entity.GetType().GetTableName()
Максимум
РЕДАКТИРОВАТЬ:
я хотел бы реализовать следующее
public static class Helper
{
public string GetTableName(Type type) {
// ??
}
}
Теперь я хотел бы получить имя таблицы по типу
var type = someEntity.getType();
var sql = "delete from " + Helper.GetTableName(type) + " where id in (...)"
1 ответ
Решение
Единственное решение, которое я могу представить, - это отражение. Вот
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// model mappings
base.OnModelCreating(modelBuilder);
// table mapping
var config = modelBuilder.Configurations
.GetPrivateFieldValue("_modelConfiguration")
.GetPrivateFieldValue("ActiveEntityConfigurations");
var mapping = new Hashtable();
foreach (var c in (IEnumerable)config)
{
var type = (Type)c.GetPrivateFieldValue("ClrType");
var tableName = (string)c.GetPrivateFieldValue("EntitySetName");
mapping[type] = tableName;
}
// store mapping whereever needed
}
Основная идея - получить объект конфигурации после вызова base.OnModelCreating.