2013年3月31日 星期日

Entity Framework 與 Stored Procedure - 回傳多種資料集

前面兩篇講的是 Entity Framework 與 Stored Procedure 的基本 CRUD 操作,那麼這一篇就來個進階一些的處理,以往直接使用 ADO.NET 執行 Stored Procedure 在遇到回傳多個資料集的時候, 可以使用 DataReader 的 NetResust 方法來處理,通常這種 Stored Procedure 回傳多種資料集會是在 Master - Details 的情況,例如訂單與訂單明細,而換成 Entity Framework 的時候,是不是可以在執行後就可以讓我們直接得到兩種型別的資料呢?

讓我們看下去 ……


Entity Framework 與 Stored Procedure - Insert, Update, Delete

上一篇「Entity Framework 與 Stored Procedure - 基本的 Select」先以最基本的 Select 讀取資料的操作來介紹 Entity Framework 透過 Stored Procedure 取得資料,而除了讀取資料外,對於資料的操作也包含了新增、修改、刪除,而這一篇就來介紹 Entity Framework 透過新增刪除修改的 Stored procedure 來執行資料的處理。

 


2013年3月30日 星期六

Entity Framework 與 Stored Procedure - 基本的 Select

在企業裡,使用 Stored Procedure (以下簡稱 SP) 相當尋常,常常會看到有為數不少的 SP 在資料庫裡頭,而這些 SP 裡面的 T-SQL 內容是各式各樣,相信有許多朋友見過的 SP 一定是比我還要多,早期有些企業因為要避免過多的 SQL Statement 在程式中出現,所以會將程式中所需要執行操作的 SQL Statement 給移到資料庫裡然後建立 SP,然後再讓程式透過 ADO.NET 或是其他方式來執行,還有一種就是某些資料的存取有一定的規則,而這些為了要統一管理這些規則而避免各個系統有自己一套的處理方式,所以會把資料存取的方式給統一建立 SP,然後各系統在去透過這些 SP 來存取資料,另外還有的就是有些資料的存取是必須要在資料庫裡頭來做,所以建立 SP 來做處理,當然還有很多其他的原因。

現在很多企業很少有專責的 DBA 來管理資料庫(其實在我的工作經歷中,也只有一家公司有這樣的編制也真的有這麼一位 DBA),大多是程式設計師也必須要兼任 DBA 的角色,也因為如此,很多個開發人員也都可以使用到公司裡的資料庫們,這樣也導致一個 DB 中的 SP 會有很多開發人員去使用與維護,經常發生的就是原本運作好好的 SP 會突然無法正常使用,這樣的狀況很多都是 SP 被別人做了修改,而另一種情況就是 DB 裡有多個 SP 的內容都是做一樣的事情,但卻會有很多分身,然後名稱都不同但有很類似,甚至於有些 SP 的內容看起來已經是沒有在使用了,但又不感冒然移除,深怕移除之後讓某個古董級系統產生異常而無法運作。

以上這些都是目前很多企業在使用 SP 的現狀,SP 的內容也是程式,但偏偏很少有去做管理或是做版本控制,導致 DB 內的 SP 隨著時間的推移而越來越多,等到哪一天資料庫要更新版本或是出了狀況時,這些 SP 就讓人相當頭大。

一開始就說了一堆看似與主題無關的內容,但也說明了過多以及過度使用 SP 對於系統開發的影響,我個人是不反對使用 SP,因為有些資料的處理並不適合放在程式中,但我反對過多的商業邏輯放在 SP 裡面去處理,每個系統的商業邏輯不盡相同,所以就必須將商業邏輯給放在個系統的程式裡做處理,在需求變動的情況下,也只要去修改系統的程式即可。

而已經使用 Entity Framework 開發的系統通常很少會再去跟資料庫裡的 SP 打交道,但是有時候是無法避免要跟 SP 做接觸,此時就必須要學習怎麼透過 Entity Framework 去跟這些 SP 溝通。

 


2013年3月28日 星期四

LINQPad - IQ Driver - for MySQL, SQLite, Oracle

LINQPad 相當好用,我已經用了很多篇文章來說明 LINQPad 的使用,一般使用 MS SQL 或 MS SQL Express 的開發人員通常在 LINQPad 裡是比較不會感覺到不便,一旦當你開發的專案是使用非 MS SQL 的資料庫時,通常在開發機裡有安裝了相對應的 Data Provider 之後就不會有無法在 LINQPad 裡使用的問題,但如果再一台沒有安裝相對應 Data Provider 的時候,就無法在 LINQPad 裡去對這些資料庫進行 LINQ 查詢操作了。

不過這個問題之前就有了解決的方式,可以讓我們不必安裝相對應的 Data Provider 的情況下還是可以在 LINQPad 裡進行查詢操作。

 


2013年3月26日 星期二

ASP.NET MVC - 使用 jQuery Form Plugin 做檔案上傳之加點東西

標題取得很弱… 因為這篇的內容要說是補充也不是,說進階也不太算,要說加強的話也沒有強到哪裡去,所以就說是「加點東西」,也真的只是加了一些內容:

  • 修正上一版本在 IE 瀏覽器所出現的 JSON 問題
  • 上傳前的檢查
  • 上傳時的效果

 


2013年3月24日 星期日

ASP.NET MVC - 使用 jQuery Form Plugin 做檔案上傳

之前曾經介紹過使用 file-uploader 來做 Ajax 的檔案上傳,而 file-uploader 也有了改版,有時間在找機會寫一下這個新版的 file-uploader,在 ASP.NET MVC 我們使用 file-uploader 可以完成 Ajax 的檔案上傳功能,但是要做的設定以及所需要了解的東西不算少,所以一些前端技術不是很熟練的朋友就會有些障礙,而能夠完成 Ajax 檔案上傳的也不是只有 file-uploader 還有很多前端套件可以替代,但是找來找去有很多都是會使用 flash 技術來完成,我對 flash 並沒有什麼成見,只是能不用就不用,而這一篇就來介紹使用 jQuery Form Plugin 這個前端套件來完成檔案上傳的功能。


2013年3月20日 星期三

給 ASP.NET MVC 初學者 - 兩種主要 View Engine 的對照

現在開發 ASP.NET MVC 網站的 View 主要都已經是用 Razor View Engine,Razor View Engine 是 ASP.NET MVC 3 發表時所推出的,而 ASP.NET MVC 一開始出來的兩個版本主要是 WebForm View Engine,就是使用 <% … %> 的方式,其實 ASP.NET MVC 的 View Engine 一開始並不只有 WebForm View Engine 而已,其實還有很多種但畢竟不是官方所推出的,所以就沒有受到太多人的關注(例如還有:Spark, NHaml, Brail, NDjango,  或是你也可以自己寫一個,詳見「ASP.net MVC 4 網站開發美學 Chapter 8-3」)。

而在 ASP.NET MVC 3 發表後,Razor View Engine 因為簡潔以及方便、容易使用的特性而使得 Razor View Engine 變成開發 ASP.NET MVC 網站的主流,如今在網路上所找到的 ASP.NET MVC 相關資訊的範例程式,在 View 的部份大多使用 Razor,而 WebForm View Engine 就比較少了,以致於這一兩年初學 ASP.NET MVC 的朋友大多不識 WebForm View Engine 的寫法,甚至於看到用 WebForm View Engine 所編輯的 View 就無法轉換為 Razor View Engine 的寫法,所以這篇就跟大家說一個最簡單的方法來比較兩種 View Engine 的寫法。

 


2013年3月16日 星期六

ASP.NET MVC - 不使用 HttpPostedFileBase 處理檔案上傳

上一篇「ASP.NET MVC - 檔案上傳的基本操作」說明了在 ASP.NET MVC 檔案上傳的基本處理方式,並且在文章的最後也提到了 Controller 的 Action() 方法在處理由前端所傳過來資料處理的不同,一般表單輸入的資料是從 FormCollection 來取得,因為 FormCollection 繼承 NameValueCollection 為 String 索引鍵與 String 值的集合,而檔案上傳並非單純的 String 值,所以上傳檔案其 default value provider 是由 HttpFileCollectionValueProvider 類別,這就說明了為何在 FormCollection 裡是找不到上傳檔案的原因。

然而之前碰到有人遇到這麼一個狀況,因為在不知道前端上傳檔案時所使用 File Upload Input Tag 所設定的 Name 為何,所以無法在後端明確的在 Action () 方法中使用 HttpPostedFileBase 來處理上傳檔案。

必須說這樣的狀況蠻特殊的,但也並非沒有任何的解決方式,在這篇文章當中就來研究看看如何解決不使用 HttpPostedFileBase 的情況下處理檔案上傳。

 


2013年3月15日 星期五

ASP.NET MVC - 檔案上傳的基本操作

做網站系統多半都會有檔案上傳的需求,而我也在 2012 年用了四篇文章的篇幅介紹如何使用「file-uploader」這個前端套件來完成一個檔案上傳的功能,

ASP.NET MVC上傳檔案,使用file-uploader : 基本操作
ASP.NET MVC上傳檔案,使用file-uploader : 進階操作 Part.1
ASP.NET MVC上傳檔案,使用file-uploader : 進階操作 Part.2
ASP.NET MVC上傳檔案,使用file-uploader : 進階操作 Part.3

不過這一系列的文章有使用「file-uploader」這個前端套件而且在後端的 Controller Action 操作也比較進階,並不適合給初學者參考,所以這邊整理一下有關 ASP.NET MVC 的檔案上傳基本操作方法。

 


2013年3月13日 星期三

ASP.NET MVC - LowercaseRoutesMVC 讓網站的 URL 輸出為小寫

在 SEO 對於 URL 的討論中,有部分的人是覺得網頁的 URL 大小寫對於 PageRank 是有影響,而有些人是說對於非使用 IIS 網頁伺服器的網站其 URL 的大小寫才會有影響,對於我來說,其實有關於 URL 大小寫與 SEO 的關係對於我來說並不是那麼清楚,但為何又要介紹這個套件呢?

其實我們開發 ASP.NET MVC 網站很少會注意到 URL 大小寫,多半我們都是在注意網頁執行的正確以及使用者是否輸入正確的 URL,但如果今天被客戶要求需要將網站內所產出的 URL 都一律使用小寫時,那麼 LowercaseRoutesMVC 這個套件就派上用場了,這邊就來介紹這一個套件。


2013年3月10日 星期日

使用虛擬機器測試不同版本的 IE 瀏覽器

開發網站需要面對多種瀏覽器,上一篇文章有提到過,早期頂多測試兩種瀏覽器就可以,但隨著作業系統與裝置的多元發展,瀏覽器也多了很多種、很多版本,所以開發網站就必須要測試很多種的瀏覽器與及不同環境,上一篇「推薦一個值得試試的服務 - BrowserStack」介紹了 BrowserStack 這個服務可以讓我們在開發網站時可以方便及輕鬆地在多種環境、瀏覽器做測試及偵錯。

但是這樣的服務存在著幾個問題,首先就是這個服務是需要付費的,而且費用雖然說不貴,但一年也是需要 6000 多台幣,如果是真的相當需要這個服務的開發人員來說,這樣的費用其實不算太貴,但是對於使用量不多到或只是偶而會需要用的開發者來說這是一筆不少的費用;而另一個問題就是這樣的服務是需要網路的,沒有網路就沒辦法使用,尤其是對於一些網路資安相當重視的工作環境來說,要使用這樣的線上服務是有困難的。

其實有很多網站開發在非 IE 瀏覽器並不會有太大的問題,而有問題的通常都會發生在 IE 瀏覽器,並不是說 IE 瀏覽器不好,而是 IE 每個版本所發生的問題都不太一樣,甚至於會有特定版本的專屬問題,尤其是在台灣,很多網站開發者不得不面對的就是客戶一定會要求網站在某個版本的 IE 瀏覽器上必須要可以正常執行且無錯誤發生,如果制式只是需要測試不同版本的 IE 瀏覽器,實在是不需要花錢去使用 BrowserStack,而這樣的情況下,最多人所採用的方法除了使用 IE Tester or IE Collection 強調可以測試不同版本 IE 的工具來測試網站,但這個方式往往會因為開發人員所使用作業系統的不同或是環境不夠單純而無法實際測試出客戶所遇到的問題,當出現這種情況時,我都會建議開發人員使用虛擬機器的方式,並準備不同作業系統且安裝不同版本的瀏覽器,當問題來的時候就可以依據以最單純的環境來做測試以找出問題。


2013年3月7日 星期四

推薦一個值得試試的服務 - BrowserStack

現在開發網站時所遇到的瀏覽器比起以往是多了好幾倍,早期大多數的網站開發人員只需要測試兩種瀏覽器就好,分別是 IE 以及 Firefox,Apple OS X 作業系統越來越多人使用後,就需要多增加測試 Safari 瀏覽器,而後 Chrome 瀏覽器在 Google 大力推廣下,又多了一個要測試的瀏覽器,這些瀏覽器的更新也越來越頻繁,每一種版本都還會有人使用,而不會因為版本的推進而隨之更新,這樣的情況在 IE 瀏覽器最常見,因為有太多的網站必須要能夠在某些版本的 IE 瀏覽器上被正確的執行,所以網站開發人員在開發的時候就要針對 IE6, 7, 8 多加留意也需要多花時間做測試。

在這些不同版本的瀏覽器做網站的測試是需要相當耐心的一件事,早期還必須要準備好幾台電腦,分別安裝不同版本的作業系統與瀏覽器,如此才能夠有實際的測試結果,到後來就可以使用 Virtual Machine 的方式在開發者的電腦裡準備不同的測試環境,但大多數開發者所使用的電腦等級是無法同時開啟多個 VM 來做測試,所以網站開發時要在不同作業系統、瀏覽器做測試還真的是挺麻煩的,尤其現在還必須再增加對於行動裝置的測試,這對於很多開發人員就是一種負擔。

不過在不久前經由 Scott Hanselman 的部落格文章發現到一個線上服務可以讓我們以更輕鬆、方便的方式來達到不同作業系統、瀏覽器、瀏覽器版本的網站測試,除了一般的瀏覽測試之外,也可以與 Visual Studio 2012 整合,在偵錯時就可以使用這項服務做 local 端的測試,這麼好的一個服務可以減輕開發人員的負擔,所以介紹給大家。

 


2013年3月3日 星期日

ASP.NET MVC 學習資源整理 Part.3 - 書籍 (Books)

好一陣子沒有繼續這個學習資源系列的整理,先簡單介紹之前兩篇學習資源的文章,

ASP.NET MVC 學習資源整理 Part.1
這一篇的內容是在介紹官方學習資源,如何從微軟的官方網站中取得 ASP.NET MVC 相關的學習教程、範例程式與 Tarining Kit。

ASP.NET MVC 學習資源整理 Part.2 - 國外部落格
這一篇的內容是列出九個國外著名的 ASP.NET MVC 部落格,程式開發不能單從一個地方來學習,還需要從許多地方來做充實,而這些國外著名大神的部落格就是最好的學習資源,不光是基礎程式教學或是進階程式技巧,還不時會有最新技術的發表與介紹,所以除了官方網站的資源之外,最好的學習資源就是國外部落格。

兩篇文章介紹了這麼多的線上學習資源但我也明白一定會有很多人是無感的,畢竟也是有很多人對於在電腦上做技術學習這件事是存在著一種障礙,所以很多人學習程式語言或是其他 IT 技術都還是習慣「看書學」,不瞞各位我也是,以往我習慣看書來學習,直到現在也是如此,,但現在線上學習資源越來越多的情況下,也漸漸地習慣使用線上教學來學習新技術,看書學技術就不再是唯一的途徑,拿著實體書籍學習還是有其好處,例如可以在書本上做註記、畫重點或是隨時翻閱等;而這一篇學習資源整理將會為各位介紹幾本 ASP.NET MVC 的書籍,涵蓋實體書與電子書,希望能各位帶來幫助。

 


提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。