ef code first: получить имя таблицы сущностей без dataannotations - PullRequest
3 голосов
/ 10 августа 2011

Есть ли способ получить информацию таблицы, определенную с помощью DbModelBuilder?

что-то вроде:

entity.GetType().GetTableName()

Макс

EDIT:

id хотел бы реализовать следующее

public static class Helper
{
  public string GetTableName(Type type) {
    // ??
  }
}

Теперь я хотел бы получить имя таблицы по типу

var type = someEntity.getType();
var sql = "delete from " + Helper.GetTableName(type) + " where id in (...)"

1 Ответ

1 голос
/ 31 октября 2011

Единственное решение, которое я могу себе представить, - это отражение. Вот оно

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...