如何追蹤 ASP.NET 網站各頁面的執行狀況與效能

通常要監測 ASP.NET 網頁的執行狀況與效能會使用 Trace (追蹤) 功能,大致上追蹤分兩種層級,一種是「網頁層級的追蹤」,另一種是「應用程式層級的追蹤」。

第一種:網頁層級的追蹤

顧名思義就是針對單一網頁的追蹤,你只要在頁面最上方的 Page 指示詞中加入 Trace="true" 屬性就可以啟用了。

    網頁層級的追蹤,顧名思義就是針對單一網頁的追蹤,你只要在頁面最上方的 Page 指示詞中加入 Trace="true" 屬性就可以啟用了

而執行起來後就會出現該頁面中執行時期完整的詳細資訊,包括 HTTP Request 的詳細資訊、追蹤資訊(Page類別中預設事件的執行時間)、整個網頁的控制項樹狀結構、所有的 Session、Cookie、HTTP Header、Form 集合、QueryString 集合、伺服器變數、......等。十分的完整而詳細,對於開發的時候除錯十分的有用。

    網頁層級的追蹤畫面

而在你自己的 Code Behind 事件程式中,就可以使用 Trace.Write 或 Trace.Warn 方法來設定輸出你追蹤的時間點與備註說明,另一方面,對於初學者來說,比較不清楚「事件執行順序」的人也可以透過 Trace 功能協助你瞭解每一個事件的執行順序。而 Trace.Write 方法與 Trace.Warn 方法唯一的不同就是用 Trace.Warn 所輸出的文字是紅色的。

    可以使用 Trace.Write 或 Trace.Warn 方法來設定輸出你追蹤的時間點與備註說明

另外,你也可以在你自己開發的 .NET 元件中使用 HttpContext.Current.Trace.Write 來輸出需要追蹤的訊息。 

    你也可以在你自己開發的 .NET 元件中使用 HttpContext.Current.Trace.Write 來輸出需要追蹤的訊息。

你如果要監控某個事件的執行時間的話,就可以在事件的第一行程式碼寫入一段 Trace.Write 程式,在最後一行寫入 Trace.Write 程式,就可以記錄到這個時間到底執行多少時間了,而你要看的追蹤欄位是「從最末項開始(秒)」這一欄,因為這一欄是指從「上一個追蹤點到這個追蹤點所花費的時間」。

第二種:應用程式層級的追蹤

這個方式可以在整個網站下進行追蹤,不用特別開啟每一頁的追蹤,只要在 web.config 的 <system.web> 區段下宣告以下的設定即可。

[code:html] 


<trace enabled="true" pageOutput="true" requestLimit="100" traceMode="SortByTime" localOnly="true" />


[/code]

開啟後原本的頁面都不會變,但是每一頁在執行的時候都會將追蹤資訊寫入到記憶體中,你可以進入該網站或該虛擬目錄下的  trace.axd 頁面就可以看到所有追蹤的資訊。

例如:http://localhost:1997/trace.axdhttp://localhost/webapp1/trace.axd

應用程式層級的追蹤畫面

每一項追蹤的後面都有「檢視詳細資料」,點進去後就會看到跟「網頁層級的追蹤」一模一樣的資料了,這對於正式主機上的效能監測十分便利,因為有些數據在開發的時候是偵測不出來的,但如果你有辦法再開發時期做好完整的壓力測試的話,當然最好不要在正式執行的環境進行追蹤分析,因為這會對網站的執行效能造成很大的影響。

除了用 Trace 功能之外,要追蹤網頁執行效能還可以用 Log Parser 工具直接從 IIS 產生的 Log 檔進行分析,找出一段時間內執行最久的頁面,然後針對這些執行最久的頁面進行細部的追蹤分析。

底下列出一些使用 Log Parser 分析網頁效能與追蹤潛在問題的文章連結:

相關連結

 

  

此文章由 will 發表於 2008/3/31 上午 12:00:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: ASP.NET | IIS

標籤: , , ,

收藏:

在 Visual Studio 中搜尋文字的多種選擇

在 Visual Studio 中搜尋文字有許多選擇,今天介紹許多好用的搜尋技巧。

第一種大家耳熟能詳的,就是用 Ctrl + F 立即開始搜尋 ( Quick Find ),你可以選擇「目前文件(Current Document)」、「所有開啟的文件(All Open Documents)」、「目前專案(Current Project)」或「整個方案(Entire Solution)」,如下圖:

   

我個人在專案開發上雖然對這個功能很依賴,但有時後也蠻討厭的,因為每次都會跳出一個 Find and Replace 的視窗讓我選,大部分的時候我只是要搜尋目前文件的文字而已,沒必要每次都選擇這麼多選項,且你上一次搜尋 Current Project 的話,這次想搜尋 Current Document 就要重選一次 Look in 欄位,我自己是覺得蠻麻煩的。

第二種很特別,就是按下 Ctrl + / 快速鍵可以進入 command line 視窗, 直接輸入要查詢的文字後按下 Enter 就可以搜尋了,也可以連續按 Enter 搜尋下一筆,也可以按下 Shift + Enter 往上搜尋,真的很方便喔!

    按下 Ctrl + / 快速鍵可以進入 command line 視窗

除此之外,還可以利用 command line 視窗執行一些常見的 Macro 指令,你只要按下 Ctrl + / 之後先輸入一個大於符號 ( > ) 就可以輸入或選擇巨集了,像我最常用的指令有兩個:

>op           開啟專案

>of            開啟檔案

你如果有自訂的巨集(Macro)也可以用這種方式快速啟動!

第三種搜尋方式也是我蠻常用的,叫做 "遞增搜尋 (Incremental Search)",快速鍵是 Ctrl + I ,按下去之後畫面的正中央匯出線一個「望遠鏡」的圖示,如下圖示:

    遞增搜尋 ( Incremental Search )

出現之後就可以直接輸入關鍵字,打幾個字他就搜尋幾的字,只要有找到就會跳到那個地方去,直到按下 Esc 按鍵才會停止搜尋,如果你要搜尋下一個的話,可以直接按下 F3 或連續按下 Ctrl + I 就會重複上一次搜尋的關鍵字了繼續搜尋下一筆,如果要「往上搜尋」的話,可以按下 Shift + F3 或 Shift + Ctrl + I 即可。

以上就是快速搜尋「目前文件」的方式,應該是蠻實用的。

除了這些以外,還有很多「搜尋整個專案」的進階搜尋方式,例如說按下 Ctrl + Shift + F 會開啟 Find in Files (在檔案中尋找) 的視窗,可以過濾特定副檔名去搜尋,在專案檔案很多的時候很實用,例如說我想要找出所有 *.aspx , *.ascx 與 *.master 的檔案中有出現 Check.aspx 字串的地方,就可以透過 Find in Files 過濾特定副檔名, 你可以在 Look at these file types 中輸入多個過濾規則,並用分號 ( ; ) 分隔即可,如下圖示:

   

找到之後,就可以在搜尋結果視窗用滑鼠雙擊(Double Click)搜尋的結果行,檔案就會自動開啟並將游標直接定位到你搜尋到的那個字串前面!

    可以在搜尋結果視窗用滑鼠雙擊(Double Click)搜尋的結果行,檔案就會自動開啟並將游標直接定位到你搜尋到的那個字串前面

也可以在搜尋結果視窗選取多行,然後按下 Enter 鍵就會自動將你選取的所有檔案自動開啟,並將游標直接定位到你搜尋到的那個字串前面,這樣一來可以很方便的快速編輯搜尋到的文字。

    也可以在搜尋結果視窗選取多行,然後按下 Enter 鍵就會自動將你選取的所有檔案自動開啟,並將游標直接定位到你搜尋到的那個字串前面,這樣一來可以很方便的快速編輯搜尋到的文字

 

  

此文章由 will 發表於 2008/3/30 上午 12:00:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: 心得分享 | Visual Studio

標籤: , ,

收藏:

ASP.NET 如何使用 HTML 中的 fieldset 和 legend 標籤

在 HTML 4.0 的規格中加入了 FieldsetLegend 標籤,可以做出這樣的效果(如下圖)

因為之前都沒看過 ASP.NET 有這個功能,還以為 ASP.NET 沒有支援呢,但也因為很少用所以沒特別去注意,直到最近才發現原來早就有這個東西了。

這兩個標籤已經內建的 Panel 類別中了,只要設定 Panel 類別的 GroupingText 屬性就會自動產生,真是方便呢! ^_^

    <asp:Panel ID="Panel1" runat="server" GroupingText="這裡是Legend的內容">
        Panel's Content Here.
    </asp:Panel>

 

相關連結

  

此文章由 will 發表於 2008/3/29 上午 12:00:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: ASP.NET

標籤: , , ,

收藏:

ASP.NET 2.0 學習心得分享與推薦書單

在推薦書單之前,我想先分享一些學習的經驗,讓有有經驗、有潛力的程式設計師能夠快速上手,但針對缺乏程式設計經驗的人來說,這裡的建議也是有幫助的,只是需要更多時間看書、寫 Code、除錯、除錯、再除錯、然後改 Code、改 Code、再改 Code,改到自己滿意為止。

對於讀書這件事來說,沒人可以強迫你讀書的,一定要強烈的動機靜下心來讀,若不能自動自發有規律的吸收新知,進步是有限的。但我也相信有許多人不看書是因為網路資訊太多,有需要上網找就好,不過我是覺得網路資訊不連貫,若要串連起完整的觀念需要一段時間(可能好幾年),但透過書籍卻是有很清楚的知識脈絡可以遵循,我是覺得比較容易得到全面的資訊,但每個人的觀念見仁見智,你只要覺得有吸收到想知道的也行。

首先,我認為一直寫 Code 而不看書是不實際的,這樣的寫 Code 過程必須面對許多因為觀念不對而導致寫錯程式的狀況,必須不斷的嘗試錯誤、上 Google 查資料、改寫、Debug、完成,也許 Try and Error 的過程很有趣,是可以不斷的驗證自己的理解能力很強,成就感也很高,但是我個人認為過多的 Try and Error 是很浪費生命的。沒有完整的觀念會導致寫程式缺乏效率,光是查資料就花了許多時間,因為不斷打字也會對你的手造成負擔。雖然這種「一步到位」的寫程式不太可能,不過可以當成一個目標來追尋,等你的程式設計功力越來越強,就會感覺越來越深刻。

我知道大部分程式設計師都很忙,都在忙著寫 Code,真要讓所有人想清楚再寫是不太可能的,所以大多數的人都一樣先寫了再說,最後如果有時間再重整自己的程式碼,因為程式設計師都是蠻懶的,所以我還蠻懷疑有幾個人會主動重整自己的程式碼,大多應該是沒出 Bug 就得過且過吧!不過會自己主動重整自己程式碼的人大多是有潛力的人才,有沒有重整過看 Subversion 的 Log 就知道了。

簡言之,擁有豐富的基礎知識(例如: .NET 基礎觀念)不管對你寫程式來說或是學習新知,速度都會比較快,像我現在一個晚上花兩小時大約可以看 50 頁的技術原文書,五年前的我大概只能看 10 頁,我現在每天也都會上網看一些國內外知名的 Blog 文章,充實新知的速度也是慢慢培養訓練出來的。

想學習 ASP.NET 2.0 (以上),多少還是需要充實 .NET 的基本觀念,我會推薦由悅知文化出版的 Microsoft .NET Framework 2.0 應用程式開發基礎 系列,共兩本:

我學習 ASP.NET 2.0 進步最多的時候是看了一本名叫 Professional ASP.NET 2.0 Special Edition 的書,當初是先看到電子書,在某一個週末一口氣把整本書看完 (將近 1,500 頁),看這本書的時候我已經寫 ASP.NET 一年多了,對 ASP.NET 只瞭解一些些,大多是工作上用的技術範圍到才會去瞭解,且當時的中文書也都寫的很粗淺,很多經驗都是自己 Try and Error 出來的,但看完這本書後覺得寫的太好了,對於 ASP.NET 的各個領域都講解的很完整,雖然每個章節所提到的技術沒有很深入,但是夠全面,對初學者來說是個不可多得的好書,當時就是覺得電子書很難標記重點,所以就把原文書給買回來了,然後貼了一堆標籤在上面,但過了幾個月後才發現中文翻譯書已經出來了,但是只有翻譯這本書的一半而已,直到最近又出了另一本下集,有興趣的人可以去買來看。

如果你已經有點 Web 的開發經驗,也可以考慮底下這兩本書,可以幫你補強許多 ASP.NET 基本觀念,這兩本書中有許多印刷錯誤的地方喔,看書的時候不要「照單全收」,最好都要認真思考過,否則可能會被誤導:

而最近剛看完一本書 Programming Microsoft® ASP.NET 3.5 (原文書),這本書的作者 Dino Esposito 文筆很好,英文用詞淺顯易懂,很容易閱讀,書中提到的大部分都跟 ASP.NET 2.0 差不多,但是卻講了許多在開發實務上才會用到的細節與小技巧,我覺得很實用,有些壓根沒想到的用他他都有提出來討論,還有書中的許多備註的地方 ( Note ) 都有很多好東西,一定要看。

剛那本 Programming Microsoft® ASP.NET 3.5 看完後欲罷不能,又去買了 Dino Esposito 的另一本書叫做 Programming Microsoft® ASP.NET 2.0 Applications: Advanced Topics,當然也寫的不錯,只是這本已經非常進階了,如果你不熟 .NET 基礎的話,應該是看不下去的。

最近也剛在看一本書叫做 Developing More-Secure Microsoft® ASP.NET 2.0 Applications,才剛看完兩章而已,看的速度有點慢,但是很過癮,會讓你更加瞭解 ASP.NET 2.0 運作的所有細節,讓你開發出來的 ASP.NET 2.0 網站更加的安全、可靠、有效率。

現在 ASP.NET 3.5 越來越熱門,我們也已經都全面採用 ASP.NET 3.5 開發了,技術轉換的幅度不大,應該很容易上手,主要是針對 LINQ 語法的熟悉與 ASP.NET 3.5 的控制項,還有 LINQ to SQL 的部分都能夠掌握的話,就差不多夠了。

最後,就是多訂閱一些國內外知名的 Blog,每天吸收一些新知,還有我的 Blog 一定要每天看,以前的文章每一篇也都要看,包你功力大增。

 

  

此文章由 will 發表於 2008/3/28 上午 12:01:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | ASP.NET | 心得分享

標籤: , , ,

收藏:

網頁親和力工具列 2.0 繁體中文版

網頁要做的好不只是畫面漂亮就好,還要考慮到各種不同上網方式的人,例如說身心障礙人士,政府所建立的無障礙網路空間服務網就已經積極推廣無障礙網路的觀念多年,也提供許多檢測的工具,只可惜成效不盡理想。

在國外就有個網頁親和力工具列 ( for IE ),功能也蠻多的,很適合用來開發無障礙網頁,這軟體日前出到 2.0 版有一段時間了,直到前幾天才釋出繁體中文版,有興趣的可以去下載回來玩玩看。

以下是工具列的圖示,每一個按鈕下都還有好多功能:

 

 

相關連結

 

  

此文章由 will 發表於 2008/3/27 上午 12:02:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Accessibility | 介紹好用工具

標籤:

收藏:

Fiddler 不只用來給 Browser 除錯,也可用於 .NET 應用程式

應該很多人都用過 Fiddler 監控所有從 Browser 發出的 Http 呼叫,對於 AJAX 應用程式來說真是個極佳的除錯工具,但你可能不知道 Fiddler 也可以用來除錯從 .NET 發出的 Http Request,例如說 .NET 有提供 WebClient 類別HttpWebRequest 類別,都是用來發送 Http 呼叫的,我們在開發應用程式的時候可以透過 Fiddler 幫我們除錯!

你在用 Visual Studio 開發 ASP.NET 網站的時候是可以不用特別設定,直接開啟 Fiddler 即可擷取到所有由 .NET 發出的所有封包,這樣你就不用辛苦的一直「猜」.NET 到底發出了什麼封包出去了。 除了這個之外,還可以用來除錯由 .NET 發出的 Web Service 呼叫的內容,讓你更瞭解 SOAP 或其他 Web Service 呼叫的實際內容。

至於為什麼 Fiddler 抓的到 .NET 發出的封包呢?主因就是因為 .NET 使用系統預設的 Proxy 設定(就是你 IE 中的工具 -> 網際網路選項 -> 連線 -> 區域網路設定 -> Proxy 伺服器設定 ),所以才可以讓 Fiddler 抓到這些封包。

但在 IIS 7 中有些許改變了,IIS 7 讓 ASP.NET 預設不使用系統預設 Proxy 設定,所以你會抓不到封包,這時你可以加入 <system.net> 設定到 web.config 中(跟 <system.web> 同一層),如下:

<system.net>
  <defaultProxy>
    <proxy  proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>

P.S. 因為 Fiddler 預設的 Proxy 埠號(Port)就是 8888

 

  

此文章由 will 發表於 2008/3/26 上午 12:01:00

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: .Net | 介紹好用工具

標籤: , , , , ,

收藏:

如何讓 LINQ 支援亂數排序功能

從一個國外的討論區 ( LINQ in Action forum ) 得知一個在使用 LINQ 時的小技巧,可以在使用 LINQ to SQL 查詢的時候能有亂數排序的效果。

首先要讓 LINQ to SQL 能夠亂數排序必須先將環境設定好,以下有三個步驟要設定:

1. 先在資料庫中建立一個檢視表(View)

[code:tsql] 

CREATE VIEW RandomView
AS
SELECT NEWID() As ID

[/code]

2. 再到資料庫中建立一個自訂函數(Function)

[code:tsql]

CREATE FUNCTION GetNewId
(
)
RETURNS uniqueidentifier
AS
BEGIN
RETURN (SELECT ID FROM RandomView)
END

[/code]

P.S. 第一步驟是必要的,因為你沒辦法在 Function 中直接回傳一個 NEWID()

3. 最後,把這個 GetNewId 函數拖曳到 LINQ to SQL Class Designer 中,之後就可以使用了!

至於使用的方法也很簡單,如下:

[code:c#] 

MyDataContext db =  new MyDataContext();

var pics = from p in db.Pictures
               orderby db.GetNewId()
               select p;

[/code]

相關連結

 

  

此文章由 will 發表於 2008/3/25 上午 12:02:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | C# | SQL Server | LINQ

標籤:

收藏:

如何刪除 Postfix 中所有還沒發送的郵件

在 Postfix 中有一套 Mail Queue Management 機制,所有郵件都可以全自動的處理,但在發送大量郵件時,有些必要的維護就可能就有需要手動處理,例如刪除所有還在 Queue 中的郵件。

以下是一些常用的指令:

# 列出目前在 Mail Queue 中的信件
mailq

# 刪除所有在 Queue 中的郵件
postsuper -d ALL

# 刪除所有正在 deferred 佇列中的郵件 ( 刪除曾經發送失敗的信 )
postsuper -d ALL deferred

# 刪除所有正在 deferred 佇列中的郵件 ( 可看出哪些信被刪除了 )
find /var/spool/postfix/deferred -type f -exec rm -vf \{\} \;

# 刪掉「三天以前」無法發出的郵件
find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f \{\} \;

# 列出目前所有無法發出的郵件
find /var/spool/postfix/deferred -type f -exec ls -l --time-style=+%Y-%m-%d_%H:%M:%S {} \;

# 刪除超過 5 天的 "defer" 佇列中的退信紀錄
find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f \{\} \;

預設所有跟 Postfix 相關的郵件都會放在 /var/spool/postfix/ 目錄下,想瞭解 Postfix 是如何管理 Mail Queue 的可以參考 qmgr - Postfix queue manager 的手冊。

以下是每個目錄摘要的說明其用途:

MAIL QUEUES

  • incoming

        從網路寄信進來本機的信。
        或從本地寄送到本地的信。
  • active

        正在準備發送的郵件。
  • defered

        無法傳送的信。會持續重試。
  • corrupt

        無法讀取或毀損的信。
  • hold

        被暫停發送的信。需要手動開啟才會發出。

DELIVERY STATUS REPORTS

  • bounce

        每一位收件者的寄送狀態資訊,說明為什麼被「退信」。
        由 bounce(8) 程式控管
  • defer

        每一位收件者的寄送狀態資訊,說明為什麼被「延遲寄信」。
        由 defer(8) 程式控管
  • trace

        每一位收件者的寄送狀態資訊,說明被 Postfix 用 "sendmail -v" 或 "sendmail -bv" 指令執行過的狀態。
        由 trace(8) 程式控管

 

  

此文章由 will 發表於 2008/3/24 上午 10:29:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Linux

標籤: ,

收藏:

整理一些 Regex 的學習資源

我第一次接觸 Regular Expression (正規表示式) 是 8 年前在學 Perl 程式語言的時候,當初一開始接觸 Regular Expression 時好像看到無字天書一樣,實在是無法「直接看語法」猜到 Regular Expression 的意義,所以只好一個規則一個規則的看,看不懂先跳過,然後一行程式一行程式的練習寫、寫錯就一直改,直到熟能生巧後,日後的子不知道省去我多少時間啊!任何有需要「字串處理」的地方全部都用 Regular Expression 來寫,不管是 Perl, PHP, JavaScript, C# 全部都有支援 Regular Expression,且語法規則都大同小異,所以真的是學一次用一輩子,反正是程式設計師一定要學的技能就是了。

學習資源

開發工具 / 學習工具

 

  

此文章由 will 發表於 2008/3/23 下午 11:20:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | C# | JavaScript | PHP

標籤:

收藏:

設計 LINQ to SQL Class 的注意事項

我們已經使用 ASP.NET 3.5 在三個案子了,全部都採用 LINQ to SQL Class 當作資料存取的介面,當中的確有些需要特別注意的地方,在此做個整理:

  1. 在 Visual Studio 2008 中可以關閉 Pluralization of names 設定

    在 VS2008 的 Tools -> Options 選項設定的 Database Tools -> O/R Designer 中的 Pluralization of names 預設 Enabled 是設定為 True,建議設定成 False

    在 Visual Studio 2008 中可以關閉 Pluralization of names 設定

    這個設定如果設為 True 的話,在 *.dbml 中的「資料集合類別」的名稱會被多加上個討厭的 s ( 複數的意思 ),我舉三個透過 LINQ to SQL Class Designer 產生的名稱做說明:

    1. 表格名稱:Banner

        單一物件名稱叫做 Banner
        集合物件名稱叫做 Banners

    2. 表格名稱:RegionClass

        單一物件名稱叫做 RegionClass
        集合物件名稱叫做 RegionClasses

    3. 表格名稱:ProductSeries

        單一物件名稱叫做 ProductSery
        集合物件名稱叫做 ProductSeries

    看出差異了嗎?表格多的時候你真的會瘋掉。如果要啟用這個選項,你就要保佑你的表格名稱取的夠好,讓 LINQ to SQL Class Designer 不要隨便幫你亂取名字,不然你怎麼猜也猜不到。

    以使用 LinqDataSource 為例,如果 Pluralization of names 設為 True 的話,這裡的 TableName 必須要用 RegionClasses,而不是 RegionClass,但第一次用的人都會以為打 RegionClass 就好了,而導致錯誤發生!

    [code:html]       <asp:LinqDataSource ID="ldsRegionClass" runat="server"            ContextTypeName="MyDataContext"           TableName="RegionClass" OrderBy="Name">       </asp:LinqDataSource>[/code]


  2. 在設計 LINQ to SQL Class 的時候,有預設資料的欄位要特別設定 Auto Generated Value 為 True,否則會新增失敗

    在設計 LINQ to SQL Class 的時候,有預設資料的欄位要特別設定 Auto Generated Value 為 True,否則會新增失敗

  3. 在 Table 之間的關聯性(Association),可以設定要產生出關聯物件的 Child Property Name 與 Parent Property Name,變更過後的名字在使用上會比較好辨識,但是一定 Child Property 與 Parent Property 兩個都設定才行。

    基本上,資料庫中有設定關聯的在 LINQ to SQL Class 中預設就會自己設定好了,不用特別設定。但自行定義關聯的部分就需要特別手動設定了!

    至於什麼時候會需要「自行設定」呢?就是當資料庫更新後,你不想重拉表格時,就有可能自行建立關聯(Association)!

    在 Table 之間的關聯性(Association),可以設定要產生出關聯物件的 Child Property Name 與 Parent Property Name,變更過後的名字在使用上會比較好辨識,但是一定 Child Property 與 Parent Property 兩個都設定才行。

  4. 如果有欄位會同時出現在 DataBoundControl ( 例如:GridView, DetailsView, FormView ) 的 Edit 與 ReadOnly 兩種模式下,該欄位的 Update Check 屬性要設定成 Always 或 WhenChanged,否則在 Edit 模式更新資料之後進入 ReadOnly 模式會看不到這個欄位更新的值。

    大部分的情況下所有欄位的 Update Check 屬性都會被設定成 Always,但不知為何有些欄位就是會被預設成 Never 而導致在開發的時候發生奇怪的問題(就是更新後資料看不到的情況)。

    如果有欄位會同時出現在 DataBoundControl ( 例如:GridView, DetailsView, FormView ) 的 Edit 與 ReadOnly 兩種模式下,該欄位的 Update Check 屬性要設定成 Always,否則 Edit 模式 Update 資料之後在 ReadOnly 模式會看不到這個欄位的值。

  5. 每當從 Server Explorer 拉表格進去設計介面時,通常會在 web.config 新增一個跟原本不一樣的 ConnectionString,所以有可能在 web.config 多一組「只有 LINQ to SQL Class 使用」的 ConnectionString,所以你可以進 *.dbml 修改 SettingsPropertyName 屬性,改成跟你原本用的就好,再去 web.config 把多餘的 ConnectionString 刪除!

  6. 通常編輯完 *.dbml 檔案後,只要一存檔就會自動更新 *.designer.cs 檔案,如果你發現你的 *.designer.cs 檔案只有更新「修改時間」但是沒有更新「檔案內容」的話,就是你的 *.dbml 中的定義有問題,但是你按下 Save 按鈕時並不會提示錯誤訊息,不過當你按下 Save All (儲存全部)按鈕時 VS2008 卻會提示你錯誤訊息喔,真的很奇怪!

  7. 只要將 DBML 放置在 App_Code 目錄下的不同子目錄內,彼此的 LINQ to SQL Class 就會有不同的 Namespace,即便拉了相同的表格在不同的 Class 也不會發生衝突!

    如果資料庫很大、表格很多的話,想要依照邏輯的區分不同的 LINQ to SQL Class 可以用這個小技巧做切割,以簡化複雜度。

  8. 沒事不要自己去改 *.designer.cs 檔,要擴充功能請用 partial class 擴充,如果你真的需要自行修改 *.designer.cs 檔的話,那就別再用 DBML Designer 了,以免你改過的程式被覆寫掉。

 

  

此文章由 will 發表於 2008/3/22 上午 12:01:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | ASP.NET | LINQ

標籤: , , ,

收藏: