Linq to SQL强类型DataContext

开发 后端
这里介绍Linq to SQL不仅仅能做字段与属性之间的映射,还可以将存储过程或用户自定义方法与.net里的方法之间做映射,功能是不是很强大?以及介绍强类型DataContext。

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<Post> Posts  
  18. {  
  19. get { return this.GetTable<Post>(); }  
  20. }  
  21.  
  22. public Table<Blog> Blogs  
  23. {  
  24. get { return this.GetTable<Blog>(); }  
  25. }  
  26.  
  27. public Table<User> Users  
  28. {  
  29. get { return this.GetTable<User>(); }  
  30. }  
  31.  
  32. [Function(Name = "dbo.GetPostsByBlogId")]  
  33. public ISingleResult<Post> GetPostsByBlogId(  
  34. [Parameter(Name="blogid",DbType="int")]  
  35. int blogid)  
  36. {  
  37. IExecuteResult result = this.ExecuteMethodCall(this, 
    ((MethodInfo)(MethodInfo.GetCurrentMethod())), blogid);  
  38. return (ISingleResult<Post>)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重要组成部分简介
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-09 15:44:22

Linq DataCo

2009-09-18 15:22:14

DataContextLINQ to SQL

2009-09-15 13:20:34

LINQ DataCo

2010-09-26 09:01:18

SQL强类型查询

2012-08-24 09:24:06

线程DbContext

2009-09-08 14:45:24

Linq to SQL支持SQL Serve

2009-09-10 14:37:57

LINQ匿名类型

2009-09-10 13:24:36

Linq参数类型

2009-09-07 16:44:28

Linq String

2009-09-10 14:21:58

LINQ匿名类型

2009-09-14 15:50:52

Linq匿名委托类型

2009-09-18 16:41:46

Linq to sql

2009-09-08 13:07:15

介绍Linq to S

2009-09-07 17:09:45

Linq To Sql

2009-09-10 10:37:15

LINQ to SQL

2009-09-16 17:11:35

LINQ To SQL

2009-09-09 18:03:47

LINQ to SQL

2009-09-11 09:41:19

LINQ to SQL

2009-09-18 13:23:27

Northwind对象LINQ to SQL

2009-09-16 09:38:27

LINQ To SQL
点赞
收藏

51CTO技术栈公众号