EF4: Почему Translate () не использует отображение таблиц? - PullRequest
2 голосов
/ 07 декабря 2010

Если у меня есть таблица БД, например:

CREATE TABLE MyTable
(
MyTableId INT PRIMARY KEY,
MyTableName CHAR(10)
)

и сущность в структуре сущностей 4 (POCO, самообследование), определенная как:

MyTable - maps to MyTable table
 - Id - maps to MyTableId
 - Name - maps to MyTableName

почему этот запрос:

SqlConnection conn = (SqlConnection)((EntityConnection)context.Connection).StoreConnection;
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM MyTable", conn);
DbDataReader result = cmd.ExecuteReader();
var objResult = context.Translate<MyTable>(result);

Не могу сказать:

The data reader is incompatible with the specified 'Project1.MyTable'. A member of the type, 'Id', does not have a corresponding column in the data reader with the same name.

Не должен ли метод Translate учитывать отображения таблиц, определенные в edmx? Есть ли способ заставить это работать без явного определения столбцов в запросе?

1 Ответ

0 голосов
/ 07 декабря 2010

MSDN говорит:

Метод Translate позволяет выполнить стандартный запрос ADO.NET к источнику данных и преобразовать возвращенные строки данных в объекты сущности.

Поставляемый DbDataReader должен содержать данные, которые сопоставляются с запрошенным типом сущности.

Неясно, сопоставляется ли он по имени или через карту, но поскольку этот запрос ADO.NET не запрос сущности (и, следовательно, не строго привязанный к уровням абстракции), кажется разумным , что он может проигнорировать его и выбрать совпадения имя-свойства.

Интересно, следует ли вам писать запрос хранилища ESQL , а не запрос к базе данных TSQL?Я хотел бы надеяться, что ESQL-запрос отображается через модель.Это должно быть довольно просто;это может быть просто

var objResult = context.ExecuteStoreQuery<TEntity>(@"select * from MyTable");
...