【问题标题】:How can I map stored procedure result into a custom class with linq-to-sql?如何使用 linq-to-sql 将存储过程结果映射到自定义类?
【发布时间】:2011-02-15 11:13:01
【问题描述】:

我有一个返回结果集(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 中,我可以将存储过程拖放到 linq-to-sql 设计器的方法窗格中。当我检查designer.cs 时,此存储过程的返回类型定义为:

ISingleResult<usp_GetDepartmentSummaryResult>

我想做的是以某种方式修改它,使其返回Department 类型,以便我可以将存储过程的结果作为强类型视图传递:

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

任何想法如何实现这一目标?

NB - 我曾尝试直接修改designer.csdbml xml file,但收效甚微。我承认在直接更新这些文件时有点超出我的深度,我不确定这是最佳实践吗?找个方向就好了。

非常感谢

【问题讨论】:

    标签: asp.net-mvc linq-to-sql stored-procedures


    【解决方案1】:

    在 linq2sql 构建器中手动创建类,因此该类作为 linq2sql 数据上下文的一部分生成。将类命名为 Department,使用您想要的名称添加 4 个属性中的每一个。在每个属性的属性中,您需要设置类型(.net 类型)、Server 数据类型(varchar(100)、int)和源(sproc 返回的字段的名称。)

    完成后,将 sproc 从服务器资源管理器拖到该类上,该 sproc 的方法将返回一个结果作为该类型的集合。

    【讨论】:

    • @Mike:完美的结果。谢谢你的帮助。唯一的问题是我已经设法使用了一种解决方法,所以现在我需要回去重构,因为我认为这种做事方式要干净得多!
    【解决方案2】:

    我试过了,它确实有效,但是如果 SP 使用临时表,它似乎不起作用。

    【讨论】:

      猜你喜欢
      • 2016-08-24
      • 2010-10-10
      • 1970-01-01
      • 2013-12-21
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多