快速开发基于LinqtoSql的三层Web应用

2022-11-11

现在, 使用三层架构开发Web应用已经是一种比较常见的作法, 在以往的开发中开发者必须自己建立相应的类库, 这本身是一个费时费力的工作, 另一个缺陷是Asp.net的界面控件不支持对这类数据层的绑定!虽然也有第三方的如NHibernate等技术, 但是这类技术的通病是其配置复杂上手时间长, 很难适应快速开发的需要。而Linq To Sql的推出, 恰恰弥补了它们的缺点, 彻底降低了三层架构开发门槛。

LI NQ是语言集成查询 (L an gu ag e In t e g r a t e d Q u e r y) 的简称, 简单地说, L I N Q就是支持以类型安全方式查询数据的一系列语言扩展, 它在Visual Studio 2008中首先发布。查询数据的形式可以是XML (L I N Q到X M L) 、数据库 (启用L I N Q的A D O.N E T, 其中包括L I N Q到S Q L、L I N Q到Dataset和LINQ到Entities) 和对象 (LINQ到Objects) 等。

本文给出了一个基于LINQ三层架构的简单应用, 重点讨论了基于LINQ的数据模型的建立, 自定义数据访问规则, Object Data source和UI控件的绑定等内容, 文中所有代码在Visual Web Developer 2008 Express (简称VWD) 下实现。

1 创建LNQ to SQL数据模型

要创建基于LNQ to SQL的应用, 首先要创建基于LNQ to SQL的数据模型。在VWD中创建LNQ to SQL数据模型十分容易!

在创建好Web项目后, 在“Add New Item”选项中选择“LINQ to SQL”, 然后从Database Explorer中把数据库对象拖放到LINQ to SQL设计器中就可以了, VWD将会检测对象的主/外键, 并且据此生成“表间关系”。在此, 我们把Sql Server 2000自带的示例数据库North Wind中Category、Products、Supplier、Order和Orderdetails表添加到LINQ to SQL设计器, 设计器会自动生成一对多的关系 (在设计器中通过箭头来表示) 见图1。

在用LINQ to SQL数据设计器设计数据模型时, VWD定义了多个数据模型类:P r o d u c t, C at e g o r y, S u p p l i e r, C us t o m e r, O rder和Order Detail, 这些类的属性映射到数据库相应的数据表的列上, 每个类的一个实体代表了数据表的一条记录。

另外, LINQ to SQL设计器也自动生成了一个Data Context类, 该类是我们查询数据库和提交更新及变更的一个主要通道。在我们上面定义的数据模型中, 这个类就是“Northwind Data Context”。利用这个类, 我们可以使用LINQ表达式可以对数据库进行查询和检索, LINQ to SQL将会在运行时自动地将LINQ表达式转换为适当的SQL语句。

2 建立自己的数据访问规则

为避免错误的数据插入到数据库中我们需要添加自己的数据访问规则。

例如, 我们要防止用户在Ship Postal Code中输入错误的邮政编码数据, 只需要在项目中加一个新的部分类来验证用户的输入就可以了。

在以上验证的示例中, 我使用On ShipPostal Code Changing部分方法, 此方法将在程序设置“Order”对象的“Ship Postal Code”属性时执行。在验证时, 如果一切正确, 将从此方法返回而且LINQ to SQL将认为该值合法。如果有错误, 验证方法抛出一个异常阻止赋值。

3 创建业务逻辑层

在创建好数据层的基础上, 我们可以方便的创建自己的业务逻辑方法。以下是两个简单的方法示例。

Category Manage类的Select All () 用于返回所有的产品分类。

Product Manage的getProducts B yCategary ID (int myCategaryID) 用于根据类别编号返回相应的产品。

4 绑定到表现层

下面我们来看下表现层上。在此, 我们要建立一个简单的产品列表, 它可根据用户选择的产品分类显示出相应的产品。其运行效果如图2所示。

首先在页面中放置一个Dropdown List和一个Gridview控件, 其数据源的类型均设定为“Object Datasource”, Dropdown List的数据源设定为Category Manage类的Select All () , 而Gridview的数据源设定为Product Manage的g e t P r o d u c t s B y C a t e g a r y I D, 且将其参数my Categary ID设置为Dropdown List的值。

下面对Gridview作一些修改。首先, 我们其smart task上选择edit columns去掉一些无关的列。然后我们来修改Supplier ID和Category ID列使其显示相应的供应商名和分类名。

以修改Supplier ID为例, 首先将其Header Text改为Supplier, 然后将该列转换为模板列。接下来我们要用到的一个优点是, 在每个LINQ To SQL数据模型中的Product类中, 每条记录都有Supplier和Category的属性, 这就是说, 如果想要显示Supplier Name, 我们只要将它们绑定到Supplier.Company Name上就行了!

现在程序运行结果如图2所示, 表格显示了人性化的Category和Supplier。

5 结语

通过以上讨论, 我们可以看到, 利用L N Q t o S Q L建立数据模型十分方便, 建立好的数据模型不仅能实现O/R映射, 而且具开发者很容易在其上扩充自己的数据访问规则, 其次, 在LNQ to SQL数据模型上建立自己的业务层也非常简单, 而在业务层上可直接使用Object Datasource绑定到UI控件, 这可使得开发效率大大提高。考虑到数据访问在众多应用中的基础地位以及LNQ to SQL的便利性, 相信它会成为下一波.NET项目实施中的首选技术之一。

摘要:Linq是vs2008中的最重要的新特性之一, 本文给出了一个基于Linq to Sql数据模型和ObjectDatasource创建三层Web应用中的实例, 重点是创建数据模型、自定义数据访问规则、ObjectDatasource和界面控件的绑定。

关键词:三层应用,Linq to Sql,部分类/部分方法,控件绑定

参考文献

[1] 戴上平, 丁士锋, 等.ASP.NET3.5完全自学手册[M].机械工业出版社, 2009.1.

[2] Scott Guthrie.Binding UI using the ASP:LinqDataSource Control.[EB/OL].http://weblogs.asp.net/scottgu/archive/2007/07/16/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx.

[3] Microsoft.MSDN Library for Visual Studio2008SP1, 2008, 12.[M/CD].

上一篇:职教校园中学生激励教育的再探讨下一篇:数控机床维修人才实训教学的研究与实践