当前位置: 首页 > 编程语言 > .NET综合 > 正文

走进Linq-How do I(4)拾遗补零篇第一节

时间:2010-11-25 博客园 横刀天笑

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

强类型DataContext

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

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

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

强类型的DataContext
  [Database (Name="CnBlogs")]
  public class CnBlogsDataContext : DataContext
  {
    public CnBlogsDataContext(string fileOrConnectionString)
      : base (fileOrConnectionString)
    { }
    public CnBlogsDataContext(string fileOrConnectionString, MappingSource mapping)
      : base(fileOrConnectionString, mapping)
    { }
    public CnBlogsDataContext(IDbConnection conn)
      : base(conn)
    { }
     public CnBlogsDataContext(IDbConnection conn, MappingSource mapping)
      : base(conn, mapping)
    { }
     public Table<Post> Posts
    {
      get { return this.GetTable<Post>(); }
    }
     public Table<Blog> Blogs
    {
      get { return this.GetTable<Blog>(); }
    }
     public Table<User> Users
    {
      get { return this.GetTable<User>(); }
    }
     [Function(Name = "dbo.GetPostsByBlogId")]
     public ISingleResult<Post> GetPostsByBlogId(
       [Parameter(Name="blogid",DbType="int")]
       int blogid)
    {
      IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo) (MethodInfo.GetCurrentMethod())), blogid);
      return (ISingleResult<Post>)result.ReturnValue;
    }
     [Function(Name = "dbo.GetBblogsOrPosts")]
     [ResultType(typeof(Blog))]
    [ResultType(typeof(Post))]
    public IMultipleResults GetBlogsOrPosts(
       [Parameter(Name = "kind", DbType = "int")]
      int kind)
    {
      IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo) MethodInfo.GetCurrentMethod()), kind);
      return (IMultipleResults)result.ReturnValue;
    }
     [Function(Name = "dbo.GetBblogsAndPosts")]
     [ResultType(typeof(Blog))]
    [ResultType(typeof(Post))]
    public IMultipleResults GetBlogsOrPosts()
    {
      IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)MethodInfo.GetCurrentMethod()));
      return (IMultipleResults)result.ReturnValue;
    }
  }