Entity Framework - получить несколько результатов из оператора SQL - PullRequest
1 голос
/ 30 ноября 2011

С EF я могу вернуть коллекцию объектов вроде

entities.Customers.ToArray();

И я могу включить другие таблицы, чтобы я мог эффективно получить 2 набора результатов в одном запросе

entities.Customers.Include("Invoice").ToArray();

или, если у меня есть какой-то пользовательский SQL, я могу получить аналогичный результат:

SqlDataReader reader = GetReaderFromSomewhere("SELECT * FROM Customer");
entities.Translate<Customer>(reader).ToArray();

Но как мне получить кратные результаты из моего собственного SQL? То, о чем я думал, было примерно таким

SqlDataReader reader = GetReaderFromSomewhere("SELECT Customer.Name AS CustomerName, Invoice.Number AS InvoiceNumber FROM Customer JOIN Invoice ON Customer.ID = Invoice.CustomerID");
entities.Translate<Customer>(reader).Include<Invoice>().ToArray();

В приведенном выше примере я добавил в префикс всех возвращаемых данных имя таблицы, чтобы метод Translate мог знать, какие столбцы принадлежат каким таблицам. Я предполагаю, что метод Tranlate не поддерживает это, но EF должен делать нечто подобное при вызове метода include. Итак, мой вопрос, как я могу получить функциональность Включить при использовании Переводчика?

1 Ответ

1 голос
/ 30 ноября 2011

AFAIK вы не можете сделать это вручную. Что делает EF, так это динамически генерирует класс на основе запроса LINQ (и включений), который может материализовать сущности. В основном этот класс знает, какие столбцы будут сопоставлены с какими свойствами.

Однако вы можете использовать микро ORM, например Dapper , который может Multi Mapping . Но это будет работать только для запросов. Поэтому отслеживание изменений и операции CUD будут недоступны.

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