65.9K
CodeProject 正在变化。 阅读更多。
Home

在 nTier ASP.NET 应用程序中使用 LINQ、JQuery 和 JSON

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.75/5 (8投票s)

2010年6月17日

CPOL

2分钟阅读

viewsIcon

34827

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 查询有三个部分

  1. 获取数据源
  2. 创建查询
  3. 执行查询

n 层示例

  1. 创建 DataAccessLayer
  2. 创建业务 AccessLayer
  3. 表示层

创建项目

在 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">&nbsp;</div>   

结论

使用 n 层,您可以构建您的 web 基础项目和窗口窗体基础。现在您的代码也减少了,因为您不需要使用 Linq 编写数据访问层和业务层。Linq 是微软推出的一项新技术。它从数据库中获取数据以及使用 jquery 通过 json 对象发送和获取数据的速度更快,json 对象将通过网络传输,并减少数据包的块。

有关更多帮助,请访问 Microsoft MSDN

历史

  • 2011 年 6 月 17 日:初始帖子
© . All rights reserved.