Есть ли в 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
, - Возвращаемые объекты имеют тип прокси.