您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“基于LINQ to SQL的WEB開發(fā)三層架構(gòu)怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“基于LINQ to SQL的WEB開發(fā)三層架構(gòu)怎么實現(xiàn)”吧!
程序員不再受限于復(fù)雜的SQL腳本,而可以一種近乎***的方式來搭建自己的面向?qū)ο笮蛙浖?系統(tǒng),這種方式就是將數(shù)據(jù)完全對象化,將SQL語句封裝到底層,由framework來完成,程序員 只需面向數(shù)據(jù)庫對象來編程,從另一種意義上來說,是把數(shù)據(jù)也程序化了。
LINQ的這種開發(fā)模式也改變了系統(tǒng)架構(gòu)的搭建方式,在以往的系統(tǒng)中,數(shù)據(jù)訪問層DAL 要訪問數(shù)據(jù)字段,業(yè)務(wù)邏輯層BLL要得到數(shù)據(jù)都需要通過數(shù)據(jù)模型層Model來處理,而LINQ和 VS2008為我們帶來了一種全新的自動化方式生成數(shù)據(jù)模型層,這就是dbml(Database Mark Language。數(shù)據(jù)庫描述語言,是一種xml格式的文檔,用來描述數(shù)據(jù)庫),有了它我們就不需要 去找那些第三方的代碼生成工具,只需要把數(shù)據(jù)表拖拽到設(shè)計器中,如下圖所示,DONET便為我 們做好了一切。
完成拖拽操作后,VS會自動生成一個數(shù)據(jù)模型層的dbml文件和相關(guān)的類文件。這樣我們省去 了數(shù)據(jù)模型層的搭建,系統(tǒng)的架構(gòu)也就有所不同,以下用一個例子簡單的講一下該架構(gòu)模型。
為了完成這個架構(gòu),我們首先要創(chuàng)建一個WEB APPLICATION項目,在新建項目窗口選擇 “ASP.NET WEB應(yīng)用程序”,為它取一個名字,并確定。
接下來,在解決方案資源管理器中再添加一個類庫項目,取名為DAL,如下圖:
再使用同樣的方法在解決方案資源管理器中添加一個類庫項目,取名為BLL,這樣我們的基 礎(chǔ)架構(gòu)搭建完成,此時我們的解決方案資源管理器應(yīng)該是如下結(jié)構(gòu)。
此時,我們先從DAL項目入手,在DAL項目中,添加一個LINQ TO SQL類,取名為Northwind( 為了方便起見,此項目使用SQL SERVER2005中的Northwind示例數(shù)據(jù)庫),雙擊新建立的 Northwind.dbml文件,然后打開“服務(wù)器資源管理器”,建立與數(shù)據(jù)的連接,并從Northwind數(shù) 據(jù)庫中,將Employees表拖拽到Northwind.dbml文件的可視化設(shè)計器中。
初始的Northwind.dbml文件代碼如下:
#pragma warning disable 1591 //-------------------------------------- ---------------------------------------- // // 此代碼由 工具生成。 // 運行時版本:2.0.50727.3053 // // 對此文件的更改可能會 導(dǎo)致不正確的行為,并且如果 // 重新生成代碼,這些更改將會丟失。 // //----------------------------------------------------------------- ------------- namespace DAL { using System.Data.Linq; using System.Data.Linq.Mapping; using System.Data; using System.Collections.Generic; using System.Reflection; using System.Linq; using System.Linq.Expressions; using System.ComponentModel; using System; [System.Data.Linq.Mapping.DatabaseAttribute(Name="Northwind")] public partial class NorthwindDataContext : System.Data.Linq.DataContext { private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); #region Extensibility Method Definitions partial void OnCreated(); partial void InsertEmployees(Employees instance); partial void UpdateEmployees(Employees instance); partial void DeleteEmployees(Employees instance); #endregion public NorthwindDataContext() : base (global::DAL.Properties.Settings.Default.NorthwindConnectionString, mappingSource) { OnCreated(); } public NorthwindDataContext(string connection) : base(connection, mappingSource) { OnCreated(); } public NorthwindDataContext(System.Data.IDbConnection connection) : base(connection, mappingSource) { OnCreated(); } public NorthwindDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public NorthwindDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public System.Data.Linq.Table
從中可以看到,這里本質(zhì)上就是以前的數(shù)據(jù)模型層,將數(shù)據(jù)整個對象化了,為了層之間的訪 問方便,我們將改類的命名空間改為Auto.DAL,并將NorthwindDataContent類的***個構(gòu)造函 數(shù)代碼修改如下,這樣修改主要是為了統(tǒng)一數(shù)據(jù)庫連接字符串的位置,因為dbml文件在生成后 會附帶生成一個app.config文件,用來存放連接字符串,而我們要把連接字符串統(tǒng)一放到 web.config中。(要訪問web.config文件,需要為DAL項目添加對System.Configuration的應(yīng)用 )
public NorthwindDataContext() : base (ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString, mappingSource) { OnCreated (); } |
完成前面的操作以后,開始建立數(shù)據(jù)訪問層的類文件,這時,先在 DAL項目下添加一個類文件,取名為DALEmployees.cs,其代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Auto.DAL { public class DALEmployees { /// NorthwindDataContext db = new NorthwindDataContext(); /// ///[object Object]城 市地址 /// public IQueryable
這個數(shù)據(jù)訪問層中只建立了一個用來根據(jù)城市地址獲取Employee數(shù)據(jù)的方法,它內(nèi)部執(zhí)行一 段LINQ,返回一個IQueryable型的結(jié)果,由于LINQ后期編譯的特性,這個結(jié)果只有在程序運行 后才會返回數(shù)據(jù)集。
接著,建立業(yè)務(wù)邏輯層,在BLL項目中,添加一個類文件,取名為BLLEmployees.cs,其代碼 如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Auto.DAL; namespace Auto.BLL { public class BLLEmployees { /// ///[object Object]城市名 /// public IQueryable
這段代碼完成了業(yè)務(wù)邏輯層的定義,建立了一個和數(shù)據(jù)訪問層的同名方法GetList,用來傳 送城市名稱參數(shù)。***,在WEB Application項目中,添加對BLL層的應(yīng)用,并在Default.aspx 頁面中添加一個GridView控件用來顯示數(shù)據(jù),Default.aspx.cs的代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Auto.BLL; namespace WebApplication2 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetList("London"); }} /// ///[object Object]城市名稱 private void GetList(string strCity) { //執(zhí)行業(yè)務(wù)邏輯層的方法 BLLEmployees bl = new BLLEmployees(); //綁 定到GridView1控件 GridView1.DataSource = bl.GetList (strCity); GridView1.DataBind(); }}} |
完成后,執(zhí)行程序,便可得到相關(guān)數(shù)據(jù),整個程序的結(jié)構(gòu)如下:
到此,相信大家對“基于LINQ to SQL的WEB開發(fā)三層架構(gòu)怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。