日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C# 3.0入门系列(三)

發(fā)布時(shí)間:2025/3/15 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 3.0入门系列(三) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從本節(jié)開(kāi)始,筆者將會(huì)和大家一起開(kāi)始體驗(yàn)dlinq了。前面我們準(zhǔn)備了數(shù)據(jù)庫(kù),也對(duì)數(shù)據(jù)庫(kù)之間的關(guān)系做了初步的了解。有了數(shù)據(jù)庫(kù)之后,數(shù)據(jù)和對(duì)象是一個(gè)什么樣的關(guān)系呢?從dlinq的設(shè)計(jì)來(lái)看,它主要是為了解決data!=objects 的問(wèn)題而產(chǎn)生的。那么,現(xiàn)在,有了dlinq后數(shù)據(jù)和對(duì)象之間就可以有一個(gè)一一對(duì)應(yīng)的關(guān)系了。我們既可以根據(jù)數(shù)據(jù)庫(kù)生成這種影射的代碼,也可以根據(jù)影射代碼生成數(shù)據(jù)庫(kù)。簡(jiǎn)單的說(shuō),數(shù)據(jù)庫(kù)和影射代碼實(shí)現(xiàn)了相互轉(zhuǎn)化。linq preview提供了一個(gè)很好的工具,可以幫我們實(shí)現(xiàn)從數(shù)據(jù)庫(kù)到代碼的影射。它就是sqlmetal。beta2的sqlmetal在C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin目錄下,或C:\WINDOWS\Microsoft.NET\Framework\v3.5目錄

打開(kāi)cmd,運(yùn)行sqlmetal程序。會(huì)出現(xiàn)下面的提示。
運(yùn)行如下的命令。? sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs
/language:csharp
你可以根據(jù)northwind數(shù)據(jù)庫(kù)生成一個(gè)nwind.cs文件。你會(huì)在 linq priview的bin目錄發(fā)現(xiàn)它^_^ 。這里的參數(shù)的含義也非常的明確,筆者也不在多贅述。

在這里,我想和大家簡(jiǎn)要介紹下這個(gè)影射文件nwind.cs.因?yàn)檫@個(gè)是程序自動(dòng)生成的,我們暫時(shí)最好不要改,在后面的進(jìn)階中,我將為大家詳細(xì)闡述此文件中code的含義,以及實(shí)現(xiàn)inheritance.
我們先來(lái)看Northwind 類的定義。
??? public partial class Northwind : DataContext {....
首先partial關(guān)鍵詞是C#2.0中出現(xiàn)的,本文不是講解C#2.0的,相關(guān)知識(shí)請(qǐng)參閱相關(guān)文獻(xiàn)。Northwind 的名字是根據(jù)你數(shù)據(jù)庫(kù)的名字定義的.我們發(fā)現(xiàn),它必須從DataContext 類繼承,才可以獲得dlinq的支持。再往下看
??????? public Table<Order> Orders;

??????? public Table<Product> Products;

??????? public Table<OrderDetail> OrderDetails;
Table類是dlinq中定義的,這里他用了一個(gè)范性的概念,類似于C++中的模板。但C#和C++還是有區(qū)別,C++的泛型模板類似替換,只是編譯時(shí)用實(shí)際類型進(jìn)行替換,因此對(duì)任何類型都可以,但是C#的泛型是在虛擬機(jī)級(jí)別上的實(shí)現(xiàn),因此在編譯時(shí)會(huì)進(jìn)行類型檢查(引)。Order, Product和OrderDetail等,都是sqlmetal程序根據(jù)數(shù)據(jù)庫(kù)里對(duì)應(yīng)的表,自動(dòng)產(chǎn)生的類。也就是class和table是一一對(duì)應(yīng)的。而這樣也恰恰實(shí)現(xiàn)了object和data的對(duì)等。讓我們?nèi)タ纯碠rder的定義吧。我這里只貼出部分。??只簡(jiǎn)單介紹幾個(gè)點(diǎn),更加詳細(xì)內(nèi)容我會(huì)在進(jìn)介階段解釋,包括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;
????????????}

????????}


}




因?yàn)橛吧湮募亲詣?dòng)產(chǎn)生的,并不需要我們自己去手動(dòng)制造,節(jié)約了我們大量勞動(dòng)力。在這里,我們可以看到Order 類必須從兩個(gè)接口繼承,而且還要去實(shí)現(xiàn)接口里定義的方法。它還定義了一些私有的變量,這些似乎和數(shù)據(jù)表里字段沒(méi)有關(guān)系。其實(shí),它在Property里描述著呢。dlinq會(huì)為每個(gè)數(shù)據(jù)表的字段定義一個(gè)對(duì)應(yīng)Property,然后,會(huì)在其上加上attribute,如
[Column(Storage = "_OrderID", DBType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDBGenerated = true)]
用來(lái)描述該P(yáng)roperty對(duì)應(yīng)數(shù)據(jù)表那個(gè)字段(Storage ),是什么類型(DBType ),是否主鍵(IsPrimaryKey ),是否自動(dòng)增(IsDBGenerated )等。在這里,我們暫時(shí)先不要對(duì)這個(gè)文件進(jìn)行修改,等你對(duì)它比較熟悉了之后,你就可以用它自己定義繼承,比如product下面還有好多種product呢。我將會(huì)在進(jìn)介中介紹。

有了影射文件后,你是不是躍躍欲試,急于想創(chuàng)建一個(gè)自己的linq project了呢?在你安裝了linq preview后,選擇
file->new->Project. 你會(huì)發(fā)現(xiàn)比平時(shí)多了個(gè)選項(xiàng)。如圖所示。

選擇linq preview后,選擇一個(gè)linq console application,添上名字,讓我們立馬開(kāi)始linq之旅吧。創(chuàng)建好工程后,將你自己前面產(chǎn)生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);
????????}


????}



}




運(yùn)行,哈哈,你的第一個(gè)linq preview的工程跑起來(lái)了,開(kāi)心伐。呵呵,好從下章開(kāi)始,筆者將著重給大家講解dlinq的語(yǔ)法。從下章開(kāi)始,本系列將更名為入門(mén)系列,呵呵,本來(lái)就沒(méi)有書(shū)可讀嗎。同時(shí)將發(fā)布在首頁(yè)精華區(qū),關(guān)注dlinq的朋友注意接收哦。

轉(zhuǎn)載于:https://www.cnblogs.com/126/archive/2006/09/06/492332.html

總結(jié)

以上是生活随笔為你收集整理的C# 3.0入门系列(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。