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

将我们的存储过程像上面那样让它返回一个"Product"对象的其中一个非常酷的事情是:linq to sql 将会像跟踪通过linq 查询返回的产品对象那样自动跟踪的通过该存储过程返回的product对象的变化。当我们调用这个DataContext类上的"SubmitChanges()"方法时,我们对该对象所做的任何的变动将会自动地被保存回数据库中。


例如,我们可以写如下的代码来(用存储过程)检索数据,并且将某一类别的所有产品的价格变为当前值的90%:

 

在最后调用SubmitChange()方法是,它就会自动地通过调用事务对所有的产品的价格进行更新。

 

处理存储过程的输出参数


linq to sql 将存储过程中的输出参数映射为了一个引用参数(ref keyword),对于值类型的,将参数声明为了可空(nullable)类型。


例如,看一下下面的这个存储过程"GetCustomerDetails",该存储过程将CustomerID作为输入参数,查询的返回值是该Customer的订单历史以及它的将公司名作为输出参数:

 

如果我们将上面的存储过程拖到我们的“Order"类上,我们就可以通过写如下的代码来调用它:

 

 

 

注意上面的代码,存储过程助手方法是如何帮助一个产品对象序列的,并且也将CompanyName作为一个输出参数返回给助手方法。
 


处理存储过程返回的多种返回结果

当一个存储过程可能返回多种结果集是,该在DataContext中的存储过程方法就不可以声明为某单一一种类型的强返回值类型了。例如,看一下如下的存储过程,它根据输出参数的不同可能会返回一个产品结果集,也可以返回一个订单结果集。

 

linq to sql 支持生成一个存储过程助手方法来执行该存储过程并且返回一个如下的IMultipleReulst对象,该方法可以通过向项目中添加一个"NorthwindDataContext"类来返回Product或者是Order类型:

 

一旦我们该方法添加到我们的项目中,当我们使用的时候就可以调用它并且将结果集或者转换为Product或者是Order序列:

 

 

对用户自定义函数的支持(UDFS)


除了支持存储过程,linq to sql 也支持scalar-valued和table-valued的用户自定义函数,存储过程和自定义函数是地位相等同的。一旦将自定义函数作为方法添加到了你的DataContext中,你就可以在linq 查询中使用它们了。

例如,看一下下面这个简单的用户自定义函数"MyUpperFunction":

 

我们可以通过将它从VS Server Explorer中拖到linq to sql 设计器中,作为我们的DataContext上的一个方法添加进来:

 

 

当对该linq to sql数据模型来写linq 表达式时,我们就可以用linq表达式来调用该自定义函数(注意它在下面的"where"语句中使用到了):

 

总结

 

linq to sql 支持调用数据库中的存储过程和自定义函数,并且能够很好地将它们和我们的数据库模型进行集成。在这篇博客中我讲述了如何通过调用存储过程来方便地检索数据并且从数据模型类中取出我们需要的数据来。在下本系列的下一篇博客中,我将会讲解在调用SubmitChanges()方法将变动保存至数据库中时,如何调用存储过程来替代更新、插入、删除逻辑。
 

 

 转载地址:http://www.cnblogs.com/hanxianlong

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值