2016-09-05 3 views
0

Я хочу использовать Database.SqlQuery в инфраструктуре Entity для запуска пользовательской операции JOIN. Я не хочу использовать LINQ для создания JOIN, потому что он делает ужасную работу по созданию исполняемого SQL на бэкэнд, и я просто хочу контролировать, что он делает.Database.SqlQuery -> Объекты инфраструктуры Entity

Так что мой вопрос: как я могу получить набор объектов (это JOIN из таблицы A в таблицу B, и я хочу как объект типа A, так и объект типа B) обратно из INNER ПРИСОЕДИНИТЬСЯ к работе с Database.SqlQuery?

+0

Это одна из самых интересных особенностей Dapper: https://github.com/StackExchange/dapper-dot-net#multi-mapping – user3185569

+0

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

ответ

2

As far as I know Метод SqlQuery использует имена свойств для сопоставления столбцов со свойствами.

Таким образом, вы можете просто объявить класс со свойствами запроса, а затем разбить его на пары A и B.

Пример:

public class AB 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
} 

var abs = dbContext.Database.SqlQuery<AB>(@"SELECT A.Id, A.Name, B.Title 
              FROM A JOIN B ON A.Id = B.Id"); 

var a_and_bs = from ab in abs 
       select new 
       { 
        A = new A { ab.Id, ab.Name }, 
        B = new B { ab.Title } 
       }; 
Смежные вопросы