【问题标题】:How do I use LINQ to SQL with stored procedures returning multiple result sets without ORM?如何在没有 ORM 的情况下将 LINQ to SQL 与返回多个结果集的存储过程一起使用?
【发布时间】:2011-08-31 10:48:13
【问题描述】:

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 组件(我们更多地使用它来快速生成到数据库的 ADO.Net 接口) .

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

var result = myDataContext.GetAllCustomersAndOrders();

存储过程如下所示:

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

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

【问题讨论】:

  • 多个结果集??还是多行(即一个表)?
  • 多个结果集。 Stackoverflow 不允许我包含代码。存储过程应包含两行:返回客户表中的所有行和返回订单表中的所有行。两个 select 语句,一个 sproc。
  • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它。像魅力一样工作(一旦你知道如何使用它)
  • 难道你不能将两个表之间的 JOIN 作为单个结果集返回吗??
  • @marc_s:我不希望这样会返回大量不需要的额外数据(在这种情况下,每行订单数据都会复制客户数据)。另外,我已经知道该怎么做。我宁愿找到解决上述问题的方法:从存储过程返回两个或更多结果集。

标签: linq-to-sql


【解决方案1】:

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

所以,如果您的 dbml 文件是 MyLinqToSQL.dbml

  • 打开 dbml 设计器
  • 将 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

【讨论】:

  • 如何用 System.Data.Linq.Mapping.ResultType 属性装饰类?
  • 使用'[ResultType(typeof(Employee))]'。有关上下文,请参阅上面链接中的第 8 步。
猜你喜欢
  • 2011-03-07
  • 2014-08-29
  • 2010-10-20
  • 1970-01-01
  • 2010-10-10
  • 2018-10-07
  • 2018-07-31
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多