2013-12-16 3 views
2

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

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

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

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

Первоначально я был (который работал):

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

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

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

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

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

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

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

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

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

ответ

3

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

+0

Я поддержал его. Более того, они этого не сделали. Я написал собственный обработчик для обработки свойства. – Solmead

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

  • Нет связанных вопросов^_^