在 nTier ASP.NET 应用程序中使用 LINQ、JQuery 和 JSON
LINQ 是 .NET Framework 3.5 中的一组类,并在 Visual Studio 2008 中引入。
引言
语言集成查询 (LINQ) 是 .NET Framework 3.5 中的一组类。Linq 在 Visual Studio 2008 中引入。在代码中编写查询以从数据源(SQL、XML、XQuery)检索数据,这是一种用于从 C# 3.0 查询数据库和对象的新语法。使用 Linq,您可以将数据映射到XML、ADO.NET 数据集、SQL、.NET 集合。

当任何人使用 3 层/n 层设计项目时,我们必须创建业务类和对象。以下是一个简单的类定义,它映射到 Users
表。
UsersBase 类
public class UserBaseEntity
{
public Int ID { get;set }
public string Fullname { get;set }
public string Fathername { get;set; }
}
SQL 表
如果您在 SQL 中创建表
create table Users
(
ID nvarchar(50) primary key not null,
Fathername nvarchar(50) not null
)
在 Linq 中,我们必须使用映射属性定义实体类。以下是如何在类中映射属性的示例。
首先,您必须在类页面顶部导入 System.Data.Linq.Mapping
。
实体类
[Table(Name="Users")]
public classUsers{
[Column(DbType="nvarchar(32) not null",Id=true)]
public string ID;
[Column(DbType="nvarchar(50) not null")]
public string FullName;
[Column(DbType="nvarchar(50) not null")]
public string FatherName;
在上面您已经注意到,类实体与 Users
表结构映射。 [Table(Name="Users")]
与 SQL 表 Name
映射。[Column(DbType="nvarchar(32) not null")] public string Customer;
字段与 SQL 列名映射。
Linq 查询有三个部分
- 获取数据源
- 创建查询
- 执行查询
n 层示例
- 创建
DataAccessLayer
创建业务
AccessLayer
表示层
创建项目
在 Visual Studio 2008 中创建一个名为 Users
的项目,并选择 3.5 Framework。
业务访问层(业务层)
创建一个名为 UsersBase.cs 的用户基类,如下图所示
using System;
using System.Collections.Generic;
using System.Text;
namespace AamirHasan.BLL
{
public class UsersBase
{
private Int64 _id;
private string _fullName;
public String FullName
{
get { return _fullName; }
set { _fullName = value; }
}
public Int64 ID
{
get { return _id; }
set { _id = value; }
}
}
}
创建一个 users
类,并创建一个名为 getUsers()
的函数,该函数将从 users
表中获取 FullName
,并返回一个用户列表,如下图所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AamirHasan.DAL;
namespace AamirHasan.BLL
{
public class Users: UsersBase
{
public List<Users> getUsers()
{
DBConnection d = new DBConnection ();
using(var db = d.GetDBContext())
{
List<Users> patientRecord = (from x in db.users
select new Users
{ FullName = x.username}).ToList<Users>();
return patientRecord;
}
}
}
}
表示层
我使用了 web 窗体,因此创建一个网页并编写一个 web 方法以获取所有用户姓名列表,如下所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using AamirHasan.BLL;//Add reference Business Tire
using System.Web.Security;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static List<Users> GetUsersList()
{
Users a = new Users();
return a.getUsers();
}
}
注意:函数应为 static
,以便从 jquery 发送请求到服务器端。
HTML 页面
在 head
标签下,包含 jquery 引用。您可以下载 jquery-1.3.2.min.js (66.18 KB)。
<script src="js/jquery-1.3.2.min.js" type="text/JavaScript"></script>
添加 jquery 请求函数,该函数将发送请求并获取 json 对象,如下所示
function GetData() {
var request ={};// if you want to send parameters
$.ajax({
type: "POST",
url: "Default.aspx//GetUsersList",
data: request,
contentType: "application/json; charset=utf-8",
dataType: "json",
dataFilter: OnDataFilter,
success: OnSuccess,
error: OnError
});
} function OnDataFilter(data) {
var dataObj = eval("(" + data + ")");
if (dataObj.hasOwnProperty("d"))
return dataObj.d;
return dataObj;
}
json 对象将把值返回到 onSuccess
函数,如果发生错误,将返回 onError
函数。
function OnSuccess(data) {
alert(data);//write you logic how to display a data on screen.
// here write your logic to display record e.g show data in div
}
function OnError(data) {
var err = eval("(" + data.responseText + ")");
alert(err.Message);
}
在客户端点击时,将调用 GetData()
函数。
<input type="button" onclick="GetData()" value="get all users"/>
<div id="DivData" runat="server"> </div>
结论
使用 n 层,您可以构建您的 web 基础项目和窗口窗体基础。现在您的代码也减少了,因为您不需要使用 Linq 编写数据访问层和业务层。Linq 是微软推出的一项新技术。它从数据库中获取数据以及使用 jquery 通过 json 对象发送和获取数据的速度更快,json 对象将通过网络传输,并减少数据包的块。
有关更多帮助,请访问 Microsoft MSDN
历史
- 2011 年 6 月 17 日:初始帖子