解決 N-Tier 多層架構設計下 LINQ to SQL 效能不彰的問題

分享到噗浪!

ASP.NET MVC 的開發原則有個 SoC (Separation of Concern) 的觀念,我們在開發較大型的 ASP.NET MVC 應用程式時會特別將資料存取層(Data Access Layer) 再細分為兩個層次,分別是 Repository Layer (資料倉儲層) 負責資料存取與欄位格式驗證,與 Service Layer (服務提供層) 負責資料篩選與商業邏輯驗證,但分層之後遇到了一個之前沒想過的問題,進而導致 LINQ to SQL 查詢效能不彰。

... 繼續閱讀 ...

  

此文章由 will 發表於 2010/3/29 下午 02:53:25

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

分類: Entity Framework | LINQ | ASP.NET MVC | Tips

標籤: , ,

ASP.NET MVC 開發心得分享 (12):Model Binder 的陷阱

分享到噗浪!

在使用 Model Binder 繫結資料模型時 (Entity Type) ,大部分情況都是非常方便的,可有效減少 Action 參數的用量,也可大幅降低程式複雜度。但是在我們之前的某個專案就採到一個 Model Binder 的地雷,這個地雷不是 ASP.NET MVC 的 Bug,而是一個開發時應注意的地方,採用標準的寫法準沒錯。

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/11/12 下午 04:01:55

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

分類: ASP.NET MVC | LINQ

標籤: , , ,

SqlCacheDependency 如何套用到有多重表格關聯的情況

分享到噗浪!

我們都知道 SqlCacheDependency 有個很大的限制,就是一次只能用「單一表格」做判斷,如果你有個檢視表(View)或使用的 SQL 語法有 JOIN 兩個以上的表格,就無法利用 SqlCacheDependency 幫你達成快取相依(CacheDependency)的設計,但我們大多的案子很少有「單一表格查詢」的狀況,以導致很多情境下無法使用 SqlCacheDependency 感覺十分懊惱,但我們最近想出了新方法!

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/8/25 下午 11:14:24

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

分類: LINQ | .Net | SQL Server

標籤: ,

SQL Server: 內部錯誤。提供給讀取資料行值的緩衝區太小。

分享到噗浪!

前陣子用了 SQL Server 2005 中極少人使用的 Query Notification 功能,且我下的 SQL 指令明明就很單純,只是做一個簡單的 SELECT 查詢卻會引來 SQL Server 的內部錯誤,自己奮戰了一個多月無解,最後還是靠微軟的技術支援中心幫我解了這個難題。

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/7/22 下午 01:01:43

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

分類: SQL Server | LINQ | .Net

標籤: ,

利用 LINQ to SQL 對資料做分頁時應注意的事 ( 重要 )

分享到噗浪!

熟悉 LINQ to SQL 的朋友應該很清楚如何透過 Skip 與 Take 方法來取得資料的部分集合,但各位可能不知道透過這種方式分頁時有個很有可能出錯的地方,而且這個錯誤可能會讓你覺得這是 LINQ to SQL 的 Bug,有在使用 LINQ to SQL 分頁的人必看此篇文章。

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/6/4 上午 12:46:01

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

分類: LINQ | SQL Server | Tips

標籤: ,

解決 LINQ to SQL 在建置時會發生 validation errors 的問題

分享到噗浪!

最近有個專案很奇怪,我有個 Visual Studio 方案檔,開啟後會載入好幾個專案(Project),其中有個專案負責所有與 Data Access Layer (DAL) 有關的工作,但我每次剛開啟 Visual Studio 2008 並載入專案後都無法直接按下 F6 直接建置方案( Build Solution ),都一定要先建置(Build)含有 DBML 的那個專案,才能再按下 F6 建置整個方案。

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/5/8 下午 10:38:00

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

分類: LINQ | Visual Basic

標籤: , ,

當表格建立觸發程序,在 LINQ to SQL 新增時可能會失敗

分享到噗浪!

我們今天遇到一個特殊的例子,當資料庫中的其中一個表格設定一個 AFTER INSERT 觸發程序(Trigger)時,竟然造成新增資料失敗,錯誤訊息如下:

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/3/17 下午 06:51:29

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

分類: LINQ | SQL Server

標籤: , ,

採用 ORM 技術需瞭解何謂查詢計畫 ( 以 LINQ to SQL 為例 )

分享到噗浪!

我們常用的 LINQ to SQL 就是一種簡單、易用的 ORM 技術。我們也都知道若是拿採用 ORM 技術直接存取 Database 這兩件事來比較,ORM 因為多卡了一層一定會比較慢一些些,但是採用 ORM 技術有很多機會可以調校(Tuning),例如資料快取(Caching)、定義查詢計畫(Query Plan)等。

... 繼續閱讀 ...

  

此文章由 will 發表於 2009/3/4 下午 07:08:42

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

分類: .Net | LINQ

標籤: , , ,

手邊有一張速查表(Cheat Sheets)是件很方便的事

分享到噗浪!

我個人有習慣收集一些網路上別人整理的速查表,因為程式開發的細節真的太多了,要能全部背起來不太可能,也沒什麼意義,甚至於有人說程式設計就是一件查詢、複製、貼上的工作而已。對我來說,寫程式首重觀念與經驗,有了完整而正確的觀念,就算記不得要怎麼寫,查詢一下就馬上能寫了;而有了經驗,對於一些難解的 Bug 自然能夠迅速解開。

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/11/27 下午 03:23:08

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

分類: .Net | ASP.NET | C# | CSS | JavaScript | LINQ | PHP | Security | SQL Server | Subversion | VBA | Visual Basic | Visual Studio | Web

標籤: , , , , , , , , , , , , , , ,

好用的 Json.NET 3.0 已發佈

分享到噗浪!

在這 Web 2.0 的時代,JSON 這個資料傳輸格式已經越來越多人在使用了,今年 5 月份 Json.NET 才剛發佈 2.0 版,在前幾天(8/25)又發佈 3.0 版,這個新版本除了修正許多所有已知的 Bugs 之外,還添加了許多新功能與特性,其中包括:

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/9/1 上午 11:39:47

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

分類: .Net | ASP.NET | C# | JavaScript | LINQ | Web

標籤: , , , , , ,

改用 SqlMetal.exe 建立 LINQ to SQL 的 DBML 檔

分享到噗浪!

我們通常在寫 LINQ to SQL 專案時,都會利用 Visual Studio 2008 內建的 LINQ to SQL DBML Designer 讓我們透過視覺化的介面將資料庫表格、檢視表或預儲程序從 Server Explorer 拖曳到設計視窗中,不過缺點就是當資料庫結構(DB Schema)改變了之後就需要跟著修正,我通常有以下選擇:

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/8/20 上午 10:24:33

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

分類: .Net | ASP.NET | C# | LINQ | Visual Studio

標籤: ,

.NET 3.5 Enhancements Training Kit RTM

分享到噗浪!

之前在 Visual Studio 2008 推出的時候,同時也推出了一套 Visual Studio 2008 and .NET Framework 3.5 Training Kit 訓練教材,可供開發人員下載自我學習。而隨著這次 Visual Studio 2008 Service Pack 1.Net Framework 3.5 Service Pack 1 的推出,也同時推出了 .NET 3.5 Enhancements Training Kit 訓練教材,其中包含了許多新增的範例程式、簡報、實驗演練(Labs)教材等,想學習新技術的人不用在等了,趕快下載回去自修吧。

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/8/14 下午 05:12:50

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

分類: .Net | ASP.NET | C# | LINQ | Visual Studio

標籤: , , , ,

解決【由於該物件目前的狀態,導致作業無效。】問題

分享到噗浪!

如果你用 LINQ to SQL 開發系統的話,若兩個關連的表格需要更新資料,但需要更新的資料是 Foreign Key 的值的話,就有些地方需要特別注意,由於透過 LINQ to SQL 讀取或寫入資料都是透過 ORM ( Object-relational mapping ) 的方式儲存,讓原本在資料庫中的資料改以物件的方式表達,因此對這種包含關連的物件,就不能像用 T-SQL 的方式一樣改變關連的鍵值。

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/8/6 下午 03:52:51

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

分類: C# | LINQ

標籤: ,

當使用 DetailsView + LinqDataSource 時發生更新衝突

分享到噗浪!

之前我曾經寫過一篇【解決 LINQ to SQL 資料庫更新衝突的情形】,主要是講解在寫 LINQ to SQL 程式的時候(Code Behind)若發生衝突的解決辦法,但我最近遇到的問題是,當我的頁面用的是 DetailsView + LinqDataSource 且完全是用宣告(Declarative)的方式寫成的,也就是改頁並沒有寫任何程式碼,這時發生了衝突的狀況的錯誤訊息是 Row not found or changed (如下圖示),不過卻完全看不出哪裡錯了,只知道新增資料的時候不會出錯,但每次更新或刪除的時候都會出錯,而從堆疊追蹤(Stack Trace)所顯示的訊息來看,也沒地方讓我修改,遇到這種問題先不要驚慌,因為這應該只能用我文章中說明的第三種方法進行設定了。

... 繼續閱讀 ...

  

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

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

分類: .Net | ASP.NET | C# | LINQ

標籤: , ,

用 SqlCacheDependency 快取 LINQ to SQL 的查詢結果

分享到噗浪!

在 ADO.NET 2.0 有個 Query notifications (SqlDependency) 機制,讓 SQL Server 2005 能夠主動通知你的應用程式(Application)來源資料是否變更,尤其是在做資料快取(Cache)的時候特別有效率。但自從改用了 LINQ to SQL 好像就很少人提到如何利用 SqlCacheDependency 類別進行 LINQ to SQL 查詢後的結果做快取。

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/7/14 上午 09:22:23

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

分類: .Net | ASP.NET | C# | LINQ

標籤: , ,

Dynamic LINQ 讓 LINQ 的世界變的更美好

分享到噗浪!

身為一個程式設計師最討厭的就是被侷限在框框裡寫程式,我們唯一的限制應該是在我們的創意而非架構。像 LINQ 剛出來的時候我覺得超級好用,不過等用在專案上實做的時候才發現綁手綁腳的,想要動態組成一個 LINQ 語法難上加難,結果過沒多久就在 ScottGu's Blog 看到一篇 Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library),看到的時候好像挖到寶一樣,以前在開發時卡住的問題全部都解決了,從今年 2 月份用到現在簡直是幾乎忘了它的存在,以致於這幾個月都沒有提及 Dynamic LINQ 這個好東西,直接上週一個朋友問我:『LINQ 的 Where 條件可以像以前組 SQL Command 一樣動態組裝嗎?』,我馬上跟他說有 Dynamic LINQ 這個東西,不用多說,他跟我剛看到 Dynamic LINQ 的時候一樣覺得:Bravo! ( 太棒了 )

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/6/23 下午 05:17:02

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

分類: .Net | C# | LINQ

標籤: ,

善用 LINQ to SQL 中的 partial class 機制進行資料格式驗證

分享到噗浪!

我們通常會使用 DetailsView 或 FormView 控制項進行資料的新增、編輯、刪除等動作,而通常我們會在裡面放置許多 Validator 控制項以驗證資料格式是否正確,不過當進行較大的專案時,開發人數通常會比較多,而且人員之間的分工也會比較明確,有的人做 SA、有的人做 DBA、有的人做 ASP.NET UI Process 開發...等等,在分層負責的情況下若能夠有效分割工作,不但專案品質會比較高,大家在寫程式的過程中也會比較專注。

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/6/17 上午 01:00:08

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

分類: .Net | ASP.NET | LINQ

標籤: ,

解決 LINQ to SQL 針對更新大型物件的效率極差的問題

分享到噗浪!

我有一個頁面是使用 DetailsView 進行資料的新增與更新動作,其中有個圖片欄位在資料庫中的資料格式為 VarBinary(MAX),直接用來儲存圖檔的二進位內容,在新增資料的時候上傳檔案並存入資料庫中,在更新的時候直更新該欄位的內容,不過在更新的時候執行的時間都非常久,即便是上傳 10KB 左右的圖檔,在執行到 db.SubmitChanges(); 時都會執行個 30 秒以上,如果上傳幾 MB 的檔案就要執行好幾分鐘,所以常常會發生 Timeout 的情況。

... 繼續閱讀 ...

  

此文章由 will 發表於 2008/6/2 下午 02:03:45

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

分類: .Net | ASP.NET | C# | LINQ

標籤: , ,