linq2sql: используя ExceuteQuery <dto>, когда возвращаемых строк нет в моем dto Могу ли я использовать общий тип данных? - PullRequest
1 голос
/ 21 сентября 2009

использует ExecuteQuery с некоторым успехом, то есть где AccessRights - это мой dto, а queryString содержит "Exec sp_name param1, param2 и т. Д."

  var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

Все отлично работает, если то, что возвращается из хранимой процедуры, может быть идеально сопоставлено с типом (dto), который я передаю в универсальном ExecuteQuery

Проблема теперь в том, что у меня есть хранимая процедура, которая возвращает нестандартное имя столбца.

В основном, у меня есть класс AccessRights (dto), который содержит "userId", "accessRightId", "Description"

но новая хранимая процедура возвращает UserId, AccessRightId, "TemporaryDescription".

теперь я не могу изменить это, потому что другие вещи зависят от этого ... если я это сделаю

 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

тогда я не вижу "TemporaryDescription", что, я полагаю, логично, поскольку его не существует

Что мне нужно сделать, так это сопоставить временное описание с описанием.

Любое тело знает, как это сделать?

1 Ответ

0 голосов
/ 21 сентября 2009

Вы можете попробовать добавить атрибут [Column(...)]; не знаю, сработает ли это.

Несколько вариантов, которые приходят на ум:

  • создать класс, который делает сопоставление 1: 1 (по имени), а затем преобразовать эти данные (через Select или запрос LINQ) в фактический предполагаемый класс
  • написать SP-оболочку, которая переименует столбец (не очень хорошо; вам понадобится временная таблица, предположительно принудительно перекомпилируемая из-за чередования DDL / DML)
  • перетащите SP на конструктор контекста данных и переименуйте столбцы вручную в сгенерированных типах (рассмотрите это как автоматическую реализацию первого маркера)
  • переместить (реорганизовать) интересную часть SP в UDF, которую вы можете вызвать из существующего sp, и использовать UDF непосредственно из контекста данных (перетащите UDF в конструктор)
...