Есть ли в EF Code First метод Translate<T>?

Я нигде этого не видел, но мне интересно, есть ли в Code First реализация метода Translate, описанного здесь. В настоящее время я использую метод Materialize, используемый в проекте EFExtensions (модифицированный для использования с Code First), но я предполагаю, что этот метод имеет следующие преимущества:

  • Вероятно, знает, что делать со сложными типами, основанными на отображениях, вместо того, чтобы делать предположения из имен свойств.
  • Вероятно, возвращает объект прокси вместо фактического T указано.

Кто-нибудь знает достаточно об этом методе, чтобы комментировать мои предположения, и кто-нибудь знает, если это доступно с Code First?

1 ответ

Решение

Только что попробовал. Этот пример в C#

using(YourDbContext ctx = new YourDbContext()) {
  ObjectContext x = ((IObjectContextAdapter)ctx).ObjectContext;

  var conn = ctx.Database.Connection;

  conn.Open();

  using (IDbCommand cmd = conn.CreateCommand())
  {
    cmd.CommandText = "select * from YourType_Table";
    using (DbDataReader reader = (DbDataReader)cmd.ExecuteReader())
    {
      YourType[] result = x.Translate<YourType>(reader).ToArray();
      Console.WriteLine(result.Length);
    }
  }
}

По поводу ваших вопросов:

  • Поддерживаются только примитивные типы. Для сложных типов это бросает InvalidOperationException,
  • Возвращаемые объекты имеют тип прокси.
Другие вопросы по тегам