2010年6月8日 星期二

服務與資料庫_LINQ To SQL+WCFService資料庫讀取兩個欄位

這篇主要是測試利用LINQToSQL做O/R Mapping,然後以LINQ的語法對資料表的某兩個欄位進行查詢,並利用WCF Service發布,前端使用ASP.aspx接收查詢後的內容。

1. 先建立ORM,將要連接的資料表拉進左邊設計介面,VS將會自行產生DataContext的定義檔。

2. 因為我們只想要選取資料表中的兩欄資料,所以必須先建立一個自訂的Class負責接收所查詢出來的內容,又因為變更ORM設定檔(也就是重拉資料表進設計介面的時候),VS會自動重新變更檔案,所以自訂的Class我們可以自己新建一個Class的檔案,存放這些自訂的Class。

public class OlaClassNews
{
public string Mark;
public string Name;
}

3. 資料庫準備好以後,就可以開始寫服務的部份,這次要使用的是WCF服務,因為在ORM的部份使用TINQToSQL所以查詢語句必須使用LINQ。先在IService1.cs寫服務契約(ServiceContract)。
[ServiceContract]
public interface IService1
{
[OperationContract]
List GetPatrolHoleTable(string value);
}

然後在IService1.svc.cs裡面實做介面。

public List GetPatrolHoleTable(string Name)
{
var result = (from T1 in context.PatrolHole where T1.PatrolName == Name select new OlaClassNews { Mark = T1.Mark, Name = T1.PatrolName }).ToList();
return result;
}

有兩點需要注意,第一點就是只查詢兩個欄位時所使用的LINQ的Select語法,第二個就是因為只要兩個欄位,所以輸出必須使用自訂的類別,不然會造成型別轉換錯誤的問題。

4. 最後就是利用Aspx的網頁來接受WCF服務。

private void UseWCF1() {
ServiceReference1.Service1Client wcf2 = new ServiceReference1.Service1Client();
GridView3.DataSource=wcf2.GetPatrolHoleTable("張先生");
GridView3.DataBind();
}

如此,便完成了整個循環。有在寫ASP.NET的人應該會覺得這篇簡直就是化簡為繁,明明就在後端寫資料庫連接就可以達成的事情,為什麼要使用一堆新的技術來完成?

當然,如果以ASP.NET來說,這些並不是必須的,但是RIA的今天,前後端完全切離了,想要存取後端資料庫勢必要運用類似的方式,若是資料庫存取部份都以類似架構完成,不管前端是何種形式,只要可以接收你所發布的服務,便可藉由該方式執行後端的任何商業邏輯,也會讓整體架構更為乾淨。大概吧~~~~~

沒有留言:

張貼留言