写在前面的废话
基于.NET的LINQ to SQL 三层体系结构可分为以下几层:Data Linq层、数据访问层、业务逻辑层、表示层。下图一中的箭头符号说明了各层之间的交互情况:数据访问层引用Data LINQ层;业务逻辑层引用数据访问层以及Data LINQ层中的实体类;表示层引用业务逻辑层以及Data LINQ层中的实体类。
其中,Data LINQ层主要包括实体类和Data Context类。通常,一个实体类对于数据库中的一张表。我们可以创建实体类的实例,在不同的层之间作为数据对象进行传输。
图 一 LINQ to SQL 三层架构
下面以创建项目时的登录窗口为例,介绍LINQ to SQL 的三层架构开发
准备工作
1. 首先需要一个数据库和一张数据表,用来存储登录人员的用户名和密码。这里,使用的是SQL Server 2005 数据库。数据库表结构如图二所示。
图 二 数据库User表
2. 打开VS,新建项目 ---> 其他项目类型--->Visual Studio解决方案--->空白解决方案。如图三所示。(这里使用的是Visual Studio 2008)
图 三 新建空白解决方案
3. 添加类库。在解决方案资源管理器中新建的解决方案上右击--->添加--->新建项目--->类库。如图四所示。同样的方法需要添加BLL, DAL, DataLinq三个类库和一个Windows窗体应用程序(如果是Web应用开发,就选择ASP.NET Web应用程序)命名为UI。
图 四 添加类库项目
添加完成后的结构如图五所示。同时在UI上右击,设UI为启动项。
图 五 项目结构图
添加引用
在解决方案资源管理器中,添加各层的引用。BLL层选择引用--->右击--->添加引用。如图六所示。添加System.Data.Linq的引用。同时根据上图一所示各层的关系,添加对DAL 和 DataLinq的项目引用。同样的方法,DAL 层添加对System.Data.Linq和DataLinq的项目引用;DataLinq层添加对System.Data.Linq的引用;UI层添加对System.Data.Linq的引用和BLL、 DataLinq的项目引用。
图 六 添加项目引用
到目前为止,三层架构已经建立起来。下面是给各层添加各自对应的类。
1. 首先是DataLinq层。右击DataLinq--->添加--->新建项目--->选择LINQ to SQL类,如图七所示。
图 七 添加 LINQ to SQL 类
2. 添加完成后将自动创建一个空白的设计器(.dbml文件),并附有服务器资源管理器 的链接, 同时也创建相关的dbml.layout 文件(XML文件) 和designer.cs 文件。打开服务器资源管理器,并建立到数据库的链接。
图 八 打开服务器资源管理器
3. 连接数据库。选择工具--->添加数据库。如图九所示。选择刚在新建的数据库,确定连接数据库。这时,就会在服务器资源管理器出现这个数据库。
4. 选择要用到的数据表User,拖放到设计器上面,如下图十。保存文件。现在,已经自动生成了包含相关的属性、方法的DataContext类和实体类。
图 十 User类
添加各层代码
DAL层
新建UserDAL类,添加如下代码
//UserDAL.cs
using DataLinq;
using System.Data.Linq;
namespace DAL
{
public class UserDAL
{
private DataLinq.DBLinqDataContext objDataContext = new DataLinq.DBLinqDataContext();
public User SelectRecordByID(string userid)
{
try
{
return (from u in objDataContext.User where u.Id == userid select u).Single();
}
catch (Exception ex)
{
throw ex;
}
}
}
}
BLL层
新建UserBLL类,添加如下代码
//UserBLL.cs
using System.Data.Linq;
using DataLinq;
namespace BLL
{
public class UserBLL
{
private DAL.UserDAL objUserDAL = new DAL.UserDAL();
public User SelectRecordByID(string userid)
{
return objUserDAL.SelectRecordByID(userid);
}
}
}
UI层代码
//LoginForm.cs
private BLL.UserBLL objUserBLL = new BLL.UserBLL();
private void btnSubmit_Click(object sender, EventArgs e)
{
string id = txtId.Text.Trim();
string psd = txtPsd.Text.Trim();
User localDataTable = objUserBLL.SelectRecordByID(id);
if (localDataTable != null && localDataTable.Psd == psd)
{
MessageBox.Show("Success");
}
else
{
MessageBox.Show("false");
}
}
至此,登录界面的代码已经完成。可以运行一下查看一下效果了。