linq to sql 操作存储过程、函数总结(一)

LINQ to SQL数据模型像下面这样写LINQ的查询表达式:

linq to sql 操作存储过程、函数总结(一)

 

当你像这样写LINQ 查询表达式时,LINQ to SQL 模型将会执行必要的动态SQL语句来检索出跟你的查询匹配的产品对象。
在这篇帖子中你将学到,你也可以选择将数据库中的存储过程遇到到你的LINQ to SQL DataContext类中,存储过程会允许你调用它来完成对产品对象的检索功能。

linq to sql 操作存储过程、函数总结(一)

 

这种数据模型的既能调用动态SQL又能调用存储过程能力是非常强大的,并且在对对象的操作上它提供了强大的灵活性。

在LINQ to SQL中映射和调用存储过程的步骤

在第二部分我讲述了如何用LINQ to SQL orM设计器来生成一个如下的LINQ to SQL类模型:

linq to sql 操作存储过程、函数总结(一)

 

注意,在上边的LINQ to SQL orM设计器中有两个面板。左侧的面板使我们可以定义映射到我们数据库的数据模型。右侧的面板允许我们有选择的映射存储过程(和自定义的函数)到我们的LINQ to sQL DataContexxt对象,这个映射的存储过程可以允许我们用它来代替动态生成的SQL语句来从该数据模型对象中查找数据。

 

如何将存储过程映射到LINQ to SQL DataContext

为了映射存储过程到我们的DataContext类中,让我们产生到VS2008中的Server Explorer窗口,看一下在数据库中的存储过程:
linq to sql 操作存储过程、函数总结(一)

 

我们可以双击存储过程来打开和编辑它们,例如,下面是在Northwind中的“CustOrderHist"的存储过程:


linq to sql 操作存储过程、函数总结(一)

 

为了将上面的存储过程映射到我们的LINQ to SQL DataContext中,我们通过用拖放的方式将它从Server Explorer中拖到我们的LINQ to SQL orM设计器中。这将自动地在LINQ to SQL DataContext类中生成如下的一个新方法:

 

linq to sql 操作存储过程、函数总结(一)

 

默认情况下,在DataContext为上生成的这个方法的方法名是和存储过程的名称是一样的,并且这个方法的返回值类型的命名方式是“[存储过程名称]结果”。例如,上面的存储过程将会返回一个"CustOrderHistResult"对象序列。我们可以选择将这个方法名进行更改:在设计器上选中它,用属性窗口来对它进行重命名。


如何调用我们新映射的存储过程

做完了上面的映射存储过程到我们的DataContext类的第一步之后,用它来进行编程的方式进行检索数据就很容易了。我们所做的只是来调用映射到我们的DataContext类上的方法来获取从存储过程中返回的一个强类型的序列。

 

linq to sql 操作存储过程、函数总结(一)

除了像上面那样对结果集进行遍历之外,我还可以将结果集绑定到UI上并将它们显示出来。例如,下面的代码将我们的存储过程的结果集绑定到了<asp:gridview>控件上:
linq to sql 操作存储过程、函数总结(一)

 

将存储过程的返回值类型映射到数据模型类上
 
 

在上面的"CustOrderHist"例子中,存储过程返回的是一个产品历史记录的序列,这个结果包含了两列数据:Product的ProuctName,客户对那条产品记录下的订单记录的总数。LINQ to SQL设计器自动地定义了一个"CustOrderHistResult"类来展示该结果。

存储过程映射到了一个我们已经在LINQ to sQL设计器中定义好的数据模型类中(例如,一个已经存在的Product或者Order实体类)。
 

例如,假设在数据库中我们有一个"GetProductByCategory"存储过程,它返回如下的产品信息:

linq to sql 操作存储过程、函数总结(一)

 

像以前那样,我们通过拖放的方式将存储过程拖到我们的LINq to sql 设计器上来在我们的DataContext中生成一个"GetProductsByCategory"方法。这次不是将这个存储过程拖到设计器任意位置,而是将它拖到在数据模型设计器中已经存在的“Product"类上:

linq to sql 操作存储过程、函数总结(一)

 

将存储过程拖到Product类上的这种行为就告诉了linq to sql 设计器,使"GetProductCategory"方法的返回一个“Product"对象:linq to sql 操作存储过程、函数总结(一)