LINQ下使用三层架构的探索(四)建立一个逻辑访问层,并且添加一些查询方法
看了刚才的评论,我觉得有些朋友曲解了我的意思,之前我并没有真正对站点进行分层,而是快速地让刚接触LINQ的人去体验使用LINQ访问数据的快捷
而这章开始才真正说到我的分层方式。
令人激动的时刻终于到了,直到现在,我们仍然在使用表示层操作对象,现在,该是体现三层架构的优势的时候了。这一章中我们将建立一个逻辑访问层Productbll。
之所以叫他“逻辑访问层”,因为我们访问的是逻辑对象而不是实体数据,因为实体数据已经被LINQ预先地转化成了对象。
按部就班地做:
1在前面的基础上打开网站,新建一个类,命名为Productbll.cs。为了使得层次清晰,我新建了两个文件夹用于存放不同层次的东西,结构如下:
2打开该类,把Public class中的代码修改至如下:
public Productbll()
{
}
//返回Products表中的所有字段
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
public IQueryable GetProduct()
{
var product = from p in db.Products
select p;
return product;
}
3 简单代码解释:
1) 我们在最开头创建一个DataContext实例,以便在后面的方法中直接使用。
2) 接下来是一段声明,告诉自动识别系统该方法是查询方法。
3) 注意我们使用了IQueryable类型,该类型是返回值的类型,可以直接作为Datasource使用。
4) 然后是LINQ语句,意为从db中的Products表(已经对象化)选取所有字段和所有记录。
5) 最后返回product(IQueryable类型)
4新建一个页面,插入一个GridView,选择对象数据源,选择Productbll类,在SELECT方法中选择GetProduct方法。
5同样可以直接使用代码来调用方法,在插入GridView后不用选择数据源,在Pageload事件中插入如下代码:
GridView1.DataSource = product.GetProduct();
GridView1.DataBind();
6运行该页面。
它是如何运行的?
如果是使用过ASP.NET2.0建立三层架构网站的朋友,一定会对第四步的操作非常熟悉,在没有LINQ以前,我们把操作数据的方法写在存储过程或者强类型的Dataset中,然后在中间层调用这些方法,最后在表示层中使用对象数据源去展现它们。
在有了LINQ以后,我们省略了Dataset和存储过程,而是直接在中间层中操作被LINQ对象化之后的数据。而操作方法和第一章中所说的是一样的,使用LINQ语句去操作对象,并且返回结果。
之后在表示层中,我们只要使用中间层所提供的方法,而不是重新写方法,就能获取我们所需要的信息。
小结:
在这一章中,我们加入了一个中间层,并且在其中LINQ语法构建了一个查询方法,最后在表示层调用它。这么做的好处很明显,我们不必在表示层中写查询方法,并且如果其他页面也需要使用该查询,就可以直接调用,省去了不必要的重复。
现在,我们的三层架构的层次结构已经出现了:
1在表示层中调用“逻辑访问”方法
2这些方法来自逻辑访问层对于“对象数据”操作后返回的结果
3这些对象来自被LINQ转化的数据
在下一章中,我们会在逻辑访问层中添加一些带参数的查询方法,以及插入、更新和删除的方法,并且在表示层中应用。注意,这些方法都是对对象操作后的结果。
祝,编程愉快!