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.

Другие вопросы по тегам