如何在没有ORM的情况下使用存储过程返回多个结果集的LINQ to SQL?

时间:2011-05-23 20:24:10

标签: linq-to-sql

http://blogs.msdn.com/b/dditweb/archive/2008/05/06/linq-to-sql-and-multiple-result-sets-in-stored-procedures.aspx

与此链接类似但是我正在使用的项目使用LINQ to SQL的ORM组件(我们更多地使用它来快速生成到db的ADO.Net接口)

目前,我们遵循的模式是:

var result = myDataContext.GetAllCustomersAndOrders();

存储过程如下所示:

enter image description here

我需要采取额外的步骤吗?我是否需要扩展生成的dbml或数据上下文分部类文件?

希望这是有道理的......解释起来有点困难,我发现的所有示例都使用dbml的ORM部分(将表拖放到dbml设计器表面)。

1 个答案:

答案 0 :(得分:6)

是的,你可以这样做,但我需要为你的dbml创建一个部分类。

因此,如果您的dbml文件是MyLinqToSQL.dbml

  • 打开dbml designer
  • 将SP拖到设计图面上
  • 保存
  • 然后按F7。

这将创建一个MyLinqToSQL.cs的部分类。

现在...

  • 打开自动生成的MyLinqToSQL.designer.cs
  • 使用与SP相同的名称复制访问方法(您要从中返回多个集合。)
  • 将其插入刚刚创建的MyLinqToSQL.cs中的部分类的主体。
  • 将方法的名称更改为至少略有不同的内容
  • 将返回类型从ISingleResult更改为IMultipleResult。
  • 使用System.Data.Linq.Mapping.ResultType属性装饰您的新类以定义您的返回集类型。

所有结果集都将在IQueryable的单个集合中返回。

然后,您可以使用反射来确定每个集合项的类型,然后将其转换为使用。

请参阅http://kishor-naik-dotnet.blogspot.com/2011/12/linq-multiple-result-set-of-procedure.html

相关问题