Отображение объектов из хранимой процедуры с использованием атрибута columnname в EntityFramework CodeFirst

columnattribute ef-code-first entity-framework-6

Вопрос

У меня есть существующий db, с которым я использую entityframework 6 Code-First для работы. Требование, однако, состоит в том, что вся работа с db должна осуществляться через хранимые процедуры. Поэтому я начал использовать новое, появившееся в 6.0:

modelBuilder.Entity<Post>().MapToStoredProcedures();

Проблема в том, что это поддерживает только отображение Insert, Update и Delete sp's not select sp, мне нужно, чтобы мы могли выбрать sp. (У меня нет доступа для редактирования любого из существующих sp)

У моего poco есть атрибуты, указывающие имя столбца для использования с использованием атрибута column. По-видимому, хотя встроенное сопоставление не поддерживает их использование, если вы не делаете прямой выбор в таблице через объект dbset.

Первоначально у меня (что работало):

return (from c in DataContext.Current.AgeRanges orderby c.StartAge select c);

Затем, чтобы переключить его на sp, я попытался (используя вызов sqlquery базы данных):

return DataContext.Current.Database.SqlQuery<AgeRange>("[DIV].[GetAgeRangesList]").AsQueryable();

Это возвратило действительные объекты, но ни один из столбцов, отмеченных атрибутом Column, не имел в них ничего.

Затем я попытался (думая, что это было против фактического объекта dbset, я получил сопоставление столбцов):

return DataContext.Current.AgeRanges.SqlQuery("[DIV].[GetAgeRangesList]").ToList().AsQueryable();

Нет, это вместо этого дало мне ошибку, что одно из свойств объекта POCO (одного из атрибутов столбца) не было найдено в возвращаемом наборе записей.

Таким образом, вопрос заключается в том, что в структуре сущности (или в лучшем случае вне этого) лучший способ вызвать хранимую процедуру и сопоставить результаты с объектами и сопоставить это соответствие атрибуту столбца с свойствами?

Я бы даже хотел использовать старый объект School Table и объект SqlCommand, чтобы заполнить его, если бы у меня был быстрый простой способ затем сопоставить объекты, которые соответствуют атрибуту столбца.

Популярные ответы

SqlQuery не соблюдает атрибут столбца. Если имена столбцов возвращаемого результирующего набора совпадают с именами свойств объекта, свойства должны быть установлены соответствующим образом. Обратите внимание, однако, что SqlQuery выполняет только минимальный объем работы (например, он не поддерживает отношения (.Include)), поэтому вы ограничиваете себя, если решаете использовать хранимые процедуры для запросов. Усовершенствование SqlQuery для использования атрибутов ColumnName отслеживается здесь: https://entityframework.codeplex.com/workitem/233 - не стесняйтесь повышать этот элемент codeplex.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему