C# 3.0入門系列(三)

來源:互聯網
上載者:User

從本節開始,筆者將會和大家一起開始體驗dlinq了。前面我們準備了資料庫,也對資料庫之間的關係做了初步的瞭解。有了資料庫之後,資料和對象是一個什麼樣的關係呢?從dlinq的設計來看,它主要是為瞭解決data!=objects 的問題而產生的。那麼,現在,有了dlinq後資料和對象之間就可以有一個一一對應的關係了。我們既可以根據資料庫產生這種影射的代碼,也可以根據影射代碼產生資料庫。簡單的說,資料庫和影射代碼實現了相互轉化。linq preview提供了一個很好的工具,可以幫我們實現從資料庫到代碼的影射。它就是sqlmetal。beta2的sqlmetal在C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin目錄下,或C:\WINDOWS\Microsoft.NET\Framework\v3.5目錄

開啟cmd,運行sqlmetal程式。會出現下面的提示。
運行如下的命令。  sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs
/language:csharp
你可以根據northwind資料庫產生一個nwind.cs檔案。你會在 linq priview的bin目錄發現它^_^ 。這裡的參數的含義也非常的明確,筆者也不在多贅述。

在這裡,我想和大家簡要介紹下這個影射檔案nwind.cs.因為這個是程式自動產生的,我們暫時最好不要改,在後面的進階中,我將為大家詳細闡述此檔案中code的含義,以及實現inheritance.
我們先來看Northwind 類的定義。
    public partial class Northwind : DataContext {....
首先partial關鍵詞是C#2.0中出現的,本文不是講解C#2.0的,相關知識請參閱相關文獻。Northwind 的名字是根據你資料庫的名字定義的.我們發現,它必須從DataContext 類繼承,才可以獲得dlinq的支援。再往下看
        public Table<Order> Orders;

        public Table<Product> Products;

        public Table<OrderDetail> OrderDetails;
Table類是dlinq中定義的,這裡他用了一個範性的概念,類似於C++中的模板。但C#和C++還是有區別,C++的泛型模板類似替換,只是編譯時間用實際類型進行替換,因此對任何類型都可以,但是C#的泛型是在虛擬機器層級上的實現,因此在編譯時間會進行類型檢查(引)。Order, Product和OrderDetail等,都是sqlmetal程式根據資料庫裡對應的表,自動產生的類。也就是class和table是一一對應的。而這樣也恰恰實現了object和data的對等。讓我們去看看Order的定義吧。我這裡只貼出部分。  只簡單介紹幾個點,更加詳細內容我會在進介階段解釋,包括inheritance。 

[Table(Name = "Orders")]
    public partial class Order : System.Data.DLinq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged 
{
        private int _OrderID;
        private string _CustomerID;
        private System.Nullable<int> _EmployeeID;

…………
        public Order() {
            this._OrderID = default(int);
            this._OrderDetails = new EntitySet<OrderDetail>(new Notification<OrderDetail>(this.attach_OrderDetails), new Notification<OrderDetail>(this.detach_OrderDetails));
            this._Customer = default(EntityRef<Customer>);
            this._Employee = default(EntityRef<Employee>);
            this._Shipper = default(EntityRef<Shipper>);
        }

        [Column(Storage = "_OrderID", DBType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDBGenerated = true)]
        public int OrderID {
            get {
                return this._OrderID;
            }
        }

}


因為影射檔案是自動產生的,並不需要我們自己去手動製造,節約了我們大量勞動力。在這裡,我們可以看到Order 類必須從兩個介面繼承,而且還要去實現介面裡定義的方法。它還定義了一些私人的變數,這些似乎和資料表裡欄位沒有關係。其實,它在Property裡描述著呢。dlinq會為每個資料表的欄位定義一個對應Property,然後,會在其上加上attribute,如
[Column(Storage = "_OrderID", DBType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDBGenerated = true)]
用來描述該Property對應資料表那個欄位(Storage ),是什麼類型(DBType ),是否主鍵(IsPrimaryKey ),是否自動增(IsDBGenerated )等。在這裡,我們暫時先不要對這個檔案進行修改,等你對它比較熟悉了之後,你就可以用它自己定義繼承,比如product下面還有好多種product呢。我將會在進介中介紹。

有了影射檔案後,你是不是躍躍欲試,急於想建立一個自己的linq project了呢?在你安裝了linq preview後,選擇
file->new->Project. 你會發現比平時多了個選項。。

選擇linq preview後,選擇一個linq console application,添上名字,讓我們立馬開始linq之旅吧。建立好工程後,將你自己前面產生nwind.cs檔案加入到工程中,在program.cs中的鍵入如下代碼。using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.Xml.XLinq;
using System.Data.DLinq;
using System.Data;
using System.Data.SqlClient;
using nwind;

class Program
{
    static void Main(string[] args)
    {
        Northwind db = new Northwind("Your Connection String");

        var q = from c in db.Customers
                 select c;
        foreach (var c in q)
        {
            Console.WriteLine(c.ContactName);
        }

    }


}


運行,哈哈,你的第一個linq preview的工程跑起來了,開心伐。呵呵,好從下章開始,筆者將著重給大家講解dlinq的文法。從下章開始,本系列將更名為入門系列,呵呵,本來就沒有書可讀嗎。同時將發布在首頁精華區,關注dlinq的朋友注意接收哦。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.