Как я могу отобразить результат хранимой процедуры в пользовательский класс с linq-to-sql? - PullRequest
4 голосов
/ 04 мая 2010

У меня есть хранимая процедура, которая возвращает набор результатов (4 столбца x n строк). Данные основаны на нескольких таблицах в моей базе данных и предоставляют сводку по каждому отделу внутри компании. Вот образец:

usp_GetDepartmentSummary

DeptName      EmployeeCount      Male      Female
HR            12                 5         7
etc...

Я использую linq-to-sql для извлечения данных из моей базы данных (nb - я должен использовать sproc, поскольку это то, что я унаследовал). Я хотел бы позвонить вышеупомянутому sproc и отобразить в класс отдела:

public class Department
{
     public string DeptName {get; set;}
     public int EmployeeCount {get; set;}
     public int MaleCount {get; set;}
     public int FemaleCount {get; set;}
}

В VS2008 я могу перетаскивать свой sproc на панель методов дизайнера linq-to-sql. Когда я проверяю designer.cs, тип возвращаемого значения для этого sproc определяется как:

ISingleResult<usp_GetDepartmentSummaryResult>

Я хотел бы как-то изменить это так, чтобы он возвращал тип Department, чтобы я мог передать результаты sproc как строго типизированное представление:

<% foreach (var dept in Model) { %>
<ul>
    <li class="deptname"><%= dept.DeptName %></li>
    <li class="deptname"><%= dept.EmployeeCount %></li>
    etc...

Есть идеи, как этого добиться?

NB. Я пытался внести поправки в designer.cs и dbml xml file напрямую, но с ограниченным успехом. Я признаю, что был немного не в себе, когда дело доходит до обновления этих файлов напрямую, и я не уверен, что это лучшая практика? Было бы хорошо получить какое-то направление.

Большое спасибо

Ответы [ 2 ]

5 голосов
/ 04 мая 2010

создайте класс вручную в конструкторе linq2sql, поэтому класс создается как часть контекста данных linq2sql.назовите класс Department, добавьте каждое из 4 свойств с именами, которые вы хотите.в каждом из свойств свойств необходимо указать тип (тип .net), тип данных сервера (varchar (100), int) и источник (имя поля, возвращаемого sproc.)

как только это будет сделано, перетащите sproc из обозревателя серверов в этот класс, и метод для sproc вернет результат в виде коллекции этого типа.

1 голос
/ 05 мая 2010

Я пробовал это, и оно работает, однако, кажется, что оно не работает, если SP использует временные таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...