2016-01-06 1 views
1

У меня довольно сложный SQL-запрос, который вместо преобразования в LINQ рекомендовал просто запустить его как Raw SQL. Глядя на примеры, я должен дать ему объект для создания списка. Поэтому я создал класс, который лучше отображает имена свойств по сравнению с именами столбцов таблицы. Однако я не могу использовать эти свойства и должен создавать имена свойств, которые соответствуют имени столбца базы данных.Карта EF raw SQL-запрос к определенным свойствам?

У меня есть класс я назвал область, которая имеет следующие свойства

public string RegionName { get; set; } 
public string DepartingStation{ get; set; } 

Однако имена столбцов БД

REG_NAME 
DEP_STATION 

Если у меня есть имена свойств такие же, как в колонке DB она возвращает Результаты. Тем не менее, я бы предпочел нам более известные имена свойств. Есть ли способ сопоставить имена свойств класса с конкретными полями БД?

using (ApiDbContext db = new ApiDbContext()) 
{ 
var results = db.Database.SqlQuery<Region>(sbQuery.ToString()).ToList(); 
} 
+2

Практически всегда наиболее простым является более эффективное. Я предлагаю вывести псевдонимы столбцов из raw sql для соответствия именам свойств класса. –

+0

Вы имеете в виду I some some alias свойства в классе? – Caverman

+1

В вашем запросе sql вместо REG_NAME, DEP_STATION и т. Д. Вы будете делать REG_NAME как RegionName, DEP_STATION как DepartingStation, ... –

ответ

4

В этом случае я предлагаю вывести псевдоним столбца из raw sql для соответствия именам свойств класса. Так что если у вас есть:

public class Region { 
    public string RegionName { get; set; } 
    public string DepartingStation{ get; set; } 
} 

тогда вы пишете сырой SQL, как это:

var subquery = @" 
select 
REG_NAME as RegionName, 
DEP_STATION as DepartingStation 
from Table1" 

С, что на месте можно смело назвать:

var results = db.Database.SqlQuery<Region>(subquery).ToList(); 

где результаты будет локальный общий список элементов Region, List<Region>. Вы можете использовать цикл и делать то, что вам нужно.

+0

Что произойдет, если у вас нет доступа к изменению процедур? При попытке сопоставить на уровне модели я использовал System.ComponentModel.DataAnnotation.Schema [Column ("ColumnName")], он все равно не работает. Я могу, конечно, использовать специфичную для данных модель, которая затем преобразуется в мою общедоступную модель с любым именем, которое я хочу, но это кажется ненужным. Я что-то пропустил? – RichieMN

+0

благодаря бесполезной именованию Oracle, это не вариант для меня :-( –

Смежные вопросы