Linq to SQL强类型DataContext
创始人
2024-06-06 11:51:46
0

Linq有很多值得学习的地方,这里我们主要介绍强类型DataContext,包括介绍Linq to SQL等方面。

最近很忙,真的很忙,所以这个系列好久没更新了,从今天起我又开始了我的走进Linq之旅。Linq to SQL的用法基本上都说完了,还有一些细枝末节的地方需要聊聊。

强类型DataContext

在Linq to SQL的***篇的时候就说道DataContext是一个入口点,我们使用Linq to SQL做的一些操作几乎都是施加在这个类上的。在使用VS的设计器生成的代码里,我们会看到一个从DataContext继承的局部类,大家都习惯的将这个类称之为强类型的DataContext,她对DataContext做了进一步的封装。

今天我们先就对DataContext一些没有介绍过的地方详细讨论一下。

首先我们先手写一个强类型DataContext:

  1. [Database(Name="CnBlogs")]  
  2. public class CnBlogsDataContext : DataContext  
  3. {  
  4. public CnBlogsDataContext(string fileOrConnectionString)  
  5. : base(fileOrConnectionString)  
  6. { }  
  7. public CnBlogsDataContext(string fileOrConnectionString, 
    MappingSource mapping)  
  8. : base(fileOrConnectionString, mapping)  
  9. { }  
  10. public CnBlogsDataContext(IDbConnection conn)  
  11. : base(conn)  
  12. { }  
  13. public CnBlogsDataContext(IDbConnection conn, MappingSource mapping)  
  14. : base(conn, mapping)  
  15. { }  
  16.  
  17. public Table Posts  
  18. {  
  19. get { return this.GetTable(); }  
  20. }  
  21.  
  22. public Table Blogs  
  23. {  
  24. get { return this.GetTable(); }  
  25. }  
  26.  
  27. public Table Users  
  28. {  
  29. get { return this.GetTable(); }  
  30. }  
  31.  
  32. [Function(Name = "dbo.GetPostsByBlogId")]  
  33. public ISingleResult GetPostsByBlogId(  
  34. [Parameter(Name="blogid",DbType="int")]  
  35. int blogid)  
  36. {  
  37. IExecuteResult result = this.ExecuteMethodCall(this, 
    ((MethodInfo)(MethodInfo.GetCurrentMethod())), blogid);  
  38. return (ISingleResult)result.ReturnValue;  
  39. }  
  40.  
  41. [Function(Name = "dbo.GetBblogsOrPosts")]  
  42. [ResultType(typeof(Blog))]  
  43. [ResultType(typeof(Post))]  
  44. public IMultipleResults GetBlogsOrPosts(  
  45. [Parameter(Name = "kind"DbType = "int")]  
  46. int kind)  
  47. {  
  48. IExecuteResult result = this.ExecuteMethodCall(this, 
    ((MethodInfo)MethodInfo.GetCurrentMethod()), kind);  
  49. return (IMultipleResults)result.ReturnValue;  
  50. }  
  51.  
  52. [Function(Name = "dbo.GetBblogsAndPosts")]  
  53. [ResultType(typeof(Blog))]  
  54. [ResultType(typeof(Post))]  
  55. public IMultipleResults GetBlogsOrPosts()  
  56. {  
  57. IExecuteResult result = this.ExecuteMethodCall(this, 
    ((MethodInfo)MethodInfo.GetCurrentMethod()));  
  58. return (IMultipleResults)result.ReturnValue;  
  59. }  

在这个类里出现了四个前面没有看到的特性:Database,Function,Parameter,ResultType至于Database就不用说了,就是做数据库映射的。

Linq to SQL不仅仅能做字段与属性之间的映射,还可以将存储过程或用户自定义方法与.net里的方法之间做映射,功能是不是很强大?这个映射就是通过Function和Parameter共同完成的。

Function有两个属性IsComposable和Name,Name就是用来指定数据库中存储过程或者用户自定义方法的名字,当IsComposable为true的时候,则表明该方法对应着一个用户自定义方法,否则对应一个存储过程,默认是false。Function特性只能放在方法上面。

Parameter就是用来映射存储过程或方法接受的参数。

【编辑推荐】

  1. LINQ查询操作经验总结
  2. LINQ遍历多个数组深入剖析
  3. Linq查询Access数据文件浅谈
  4. LINQ构建框架设计学习笔记
  5. LINQ重要组成部分简介

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...