發表文章

目前顯示的是 2014的文章

[Entity Framework] edmx的欄位轉成列舉

圖片
EntityFramework的edmx,有2種方式可以將欄位型別為 Byte、Int16、Int32、Int64 或 SByte的欄位轉成列舉型別。1.是透過Designer直接建立新的列舉,2.關聯現有的列舉。
1.建立新的列舉

[AngularJs] 自訂Directive-下拉式選單

圖片
Angular有許多內建的directive來方便我們對html元素的操作,例:ng-option、ng-repeat…等。除了內建的我們也可以自訂directive來封裝一些常用的功能。本篇重點為如何自訂Directive將某個常用的下拉式選單包裝起來,較詳細的說明可以參考最下方的參考來源。

主要功能:將常用項目封裝成一個獨立的元素my-select 指定預設值my-selected並與directive作雙向繫結 directive對外通知事件 Demo See the Pen directive-4-scope-event by kimxinfo (@kimxinfo) on CodePen.

[Window Phone App] 小小聲的說參與微軟的活動中獎了

圖片
這兩天剛好看到微軟有一活動”加入新一代設計大師援助計畫!”,上架任一app的分類為遊戲或娛樂,即可以申請奬學金,剛好以活動此推動一下我這懶骨頭,不然上了那麼多app的課程,還沒上架過任一app,還真是有點慚愧XD。
活動內容有註明,若同時上架WindowPhone及Window Desktop加一個帳號最多申請6次的話,最多可以申請18000,不過我志在參加,所以只上架一個Window Phone App。


Power Shell 初體驗

圖片
同事分享一個在MVA看到的教學影片"Windows PowerShell 3.0 教學",跟著練習一遍後,將相關指令整理如下:
什麼是Power Shell      Windows PowerShell是微軟為Windows環境所開發的程式及腳本語言技術,採用的是命令列介面。這項全新的技術提供了豐富的控制與自動化的系統管理能力。除了在管理系統時透過此介面執行原有的命令列工具外,還可以透過內建的一百多種標準命令工具來額外管理登錄檔資料或WMI以及事件日誌與數學運算等等..
基本指令 先打開power shell

[Web API] 回傳格式設定

圖片
在使用WebAPI遇到了2個序列化的小小問題,整理如下:

讓Client端無論如何都回應JSON格式
在Chrome瀏覽WebAPI,預設會回傳XML格式,但用IE則回傳JSON格式

[SignalR] 實作聊天室功能

圖片
今天搜尋文章時,看到MSDN有針對SngalR作一系列的悠閒Coding介紹,一時手癢跟著作一遍,來看看到底有多悠閒(誤),由於文章內的SignalR版本是1.1,到2.x後有點小變更,將內容順便整理如下:

安裝Nuget 1.先建立一個空白Web專案。
2.Nuget—>Microsoft ASP.NET SignalR,此套件會順便裝好其他必要套件

[AngularJs] 使用Protractor作前端測試-入門

圖片
前陣子去Techday時聽這堂課時"DEV 204 使用 AngularJS 在 ASP.NET 專案上開發企業水準的應用,講師有提到使用Protractor來作前端的單元測試,但他沒介紹如何使用….=.=,為了一解心中疑惑,Survey相關教學後,將相關使用環境、方式整理如下:
什麼是Protractor它是AngularJs專門用來作前端測試的工具,透過nodejs上的selectium,執行chrome、fiirefox、IE等瀏覽器,來模擬使用者操作行為並驗證你撰寫好的AngularJs程式是否正確。

執行環境AngularJs:測試的網頁一定要內含AngularJs,否則會出現沒有Angular的錯誤 ,修正:可以使用browser.driver來撰寫 Java Runtime:selectium的執行環境

http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.htmlNodeJs:Protractor的執行環境 撰寫測試程式 index.html此檔案會用來測試回應的title

index.spec.js單元測試程式,如下為使用browser物件執行index.html並取回title作比對是否為預期值

ps:最外頭的describe為描述測試方法的內容
protractor.conf.js單元測試程式的定義檔,1.baseUrl:指定測試的Url,2.specs指定要測試哪些檔案,如下圖指定spec目錄下所有副檔名為.spec.js的檔案

套件安裝執行nodejs command prompt
1.protractor安裝npm install -g protractor 2.webdriver更新 selectium webdriver-manager updateps:for chrome v54的driver 更新webdriver-manager update --standalone true --versions.chrome 2.24 執行測試

1.執行web server本例是透過nodejs來執行index.js(若你使用其他Web環境,可以忽略此項)


index.js


2.透過protractor指令執行測試pro…

[Expression Tree] LINQ動態欄位查詢-動態代理類別

圖片
在前一篇文章"LINQ動態欄位查詢"介紹到使用Expression來作欄位的動態查詢,但此方法有一缺點是因EntityFramework在查詢時,不能回傳與來源型別一樣的結果,所以使用上會變成查ProductEntity但回傳另一型別ProductInfo。若只是基本的單資料表查詢,那倒還好,但在實務上通常會Join到其他資料表後,再回傳一個多個資料表欄位的類別,如下程式查詢ProductEntityCategoryEntity,回傳ProductInfo。



此時若要再透過前文的動態查詢欄位方法,則必須建立另一個類別才能達到,例 ProductXXXInfo.........,雖然只要新增一個類別再繼承ProductInfo即可以,但之後隨著系統發展越來越大的話,這種為了動態查詢建立的代理類別會越來越多..........。心想手動建立代理類別的方式可以是動態的嗎....?

  印象中EntityFramework預設就有使用代理類別來作LazyLoading機制,心想可以參考相關的作法來實作代理類別,在Google搜尋一下後,找到一篇使用ILGenerator來達到此功能。

   什麼是ILGenerator? 根據MSDN的介紹,可以透過它在執行時期產生 Microsoft Intermediate Language (MSIL) 指令,建立動態組件、方法和建構函式...等等 (詳原文)。

[Sql Server] 資料庫備份筆記

圖片
今天與同事討論資料庫備份的一些特性後,與前兩天參考保哥的文章作一些整理。
完整備份會備份資料檔.mdf 及交易記錄檔 .ldf作差異備份及交易記錄備份前,完整備份要先作 差異備份只會備份資料檔.mdf,並與最近的一次完整備份作比對來備份有異動過的資料不會備份交易記錄檔 .ldf 交易記錄檔備份只會備份交易記錄檔 .ldf每次的完整或差異備份後,會重新開始交易記錄的起點每次的備份會與上次的交易記錄作差異的交易記錄備份。備份後的副檔名為.trn不是.bak

[Expression Tree] LINQ動態欄位查詢

最近專案有一需求是讓使用者挑選所需的欄位來顯示在列表上,以往用SQL語法都是組字串去查詢,但現在用的是Entityframework,若要在LINQ的查詢上作這件事,似乎就沒那麼容易....,幸好前陣子有對Expression作一些學習,將舊文章再溫習一篇後將此功能實作出來。

動態查詢欄位 如下程式,相關註解已寫在每行程式上方,唯一較特別的是此方法傳入的IQueryable是ProductModel但回傳的是ProductTargetModel,這是因為在Linq To Entities的查詢預設不支援同一型別的回傳。

[Visual Studio] 使用套件SlowCheetah為App.config作轉換

圖片
在Web專案的web.config可以分為web.config.release、web.config.debug或更多如下圖,幫助我們在發佈時,切換不同環境將組態作轉換。此功能很好用,但在桌面應用程式就沒有提供此種功能,所以app.config每次在發佈時都要手動調整一下。

前一陣子寫好的一個主控台程式今天要部署,想說來找一下有沒有相關的套件可以作這件事,發現Scott Hanselman在2011年已有對此發表了一篇文章,天丫~~~2011年就有了......。

[TFS] 擱置暫止的變更

圖片
之前的習慣是程式開發到一半遇到插單或下班時間到了,只要是程式碼Complier會過,就會將程式碼簽入,這樣的簽出/簽入並不符合版控原則。若此時別人取得你簽入的部份,剛好程式邏輯出錯或是改到一半的方法被別人引用到..........就是一連串的杯具....
   上述的問題,你可能會問,若我沒有簽入的話,而下班了剛好電腦壞掉或其他因素造成程式不見了怎麼辨?此時我們可以透過擱置暫止的變更來幫我們將程式碼保留在TFS上,而別人也不會取得你修改到一半的程式。

擱置暫止的變更 如下圖,Title=…1.0.0.4

程式改到一半,遇到插單

[TFS] 為專案目錄建立標籤

圖片
接著上篇分支與合併,若我們想要保留每次合併前的版本,在Tech Day的課程也有介紹到標籤適用的情境,可以用在為每次的發佈前的版本定義標籤,以利日後比對各版本之間的差異及還原。在此之前我都把它當作變更集的一種,只是多一個分類好搜尋...=.=


[TFS] 分支與合併

圖片
在很早以前就知道TFS有分支與合併的功能,只是一直都不太知道要怎麼用,這次去Tech Day 2014聽完課"從版本管控到持續整合 (Continuous Integration, CI) 的實踐"後......感覺自己需要被鞭子抽幾下,有那麼好用的功能卻一直放著不用.....=.=,以下為根據實務上會用到功能的練習一下

分支流程設計至少要兩條線:主要、開發(本篇針對此作測試)
最多不超過4條
插單或Bug單分支合併

[Visual Studio] 自訂Snippet擴充套件

圖片
隨著開發共用的方法越來越多,要如何讓團隊快速上手使用,除了寫一些範例程式給成員,最近開始著手寫一些Code Snippet(程式碼片段),讓成員在撰寫時能更得心應手,不用每次要寫時都要再查一下範例............ps:我自己也是三不五時要查一下XD。
關於Code Snippet的撰寫,可以參考保哥的文章,這裡不多介紹,本篇著重在若寫好了程式碼片段要如何分享給其他成員。在開始介紹前,先寫一下幾種選擇:
1.放在公用目錄,請成員取回放到VisualStudio程式碼片段目錄 C:\Users\user\Documents\Visual Studio 2013\Code Snippets。
2.自己寫一個安裝檔,安裝後壓縮至目錄.......聽起來的工程就很大....算了。
建立Snippet擴充套件  上述幾點還得考慮日後如何更新.....針對這些安裝及更新問題,在VisualStudio早有提供相關的作法可以解決,透過擴充套件的專案範本,我們可以將相關的程式碼片段,封裝成一個套件上傳至Visual Studio Gallery,讓成員下載安裝,若日後更新的話在VisualStudio也會提醒。
Step-1 建立VXIS Project

[Azure] 使用SendGrid發信

圖片
系統本來是使用GMail的SMTP來發信,但在使用上有其他限制,例:1天只能發1000封、在Azure上的安全性問題等等。前兩天剛好同事提到Azure上有第三方的提供的SMTP服務"SendGrid",參考了相關文章後覺得還不錯,決定將發信功能改為SendGrid。

什麼是SendGrid它是Cloud-base email service,提供高信賴、可擴展性、及時性的分析記錄及查詢報表等等。 提供彈性的API跟你的系統整合。 Free版本,一個月可以發25000封 更多請參考官網

申請方式 在最下方功能列—>New—>Store



檔案上傳的一些疑惑

圖片
這幾天在寫檔案上傳的程式時針對Stream的讀寫有些疑惑一直無法搞懂,survery了一些文章後,將搞懂的整理如下:Client透過什麼樣的方式,傳送給Server端?   在送出的表單設定Content-Type:multipart/form-data,此為將表單內若有其他不同類型資料時需包成一個Request,並將檔案轉成2進位透過Post送出。送出前透過boundary="分隔的識別字串"來區隔送出的資料,如下圖boundary=----WebKitFormBoundaryEZDuDWbyAS56kbIR分隔2個欄位,一個為輸入文字(123),另一個為上傳檔案。Client端送出後,Server端接收到的檔案Stream來源為何?   IIS收到資料後會將完整的內容暫存在Temp File內,而應用程式再將相關資訊讀出,例:Controller收到的FormCollection及HttpPostedFileBase檔案上傳物件。HttpPostedFileBase.InputStream的基底類別是FileStream,用來讀取暫存檔內屬於上傳檔案的部份。這也是釐清為何在觀察w3wp.exe,在Server端還未讀取Stream的資料時,記憶體不會增加。圖:為HttpPostedFileBase.InputStream Trace後的資訊參考來源http://huan-lin.blogspot.com/2012/04/about-aspnet-file-upload.html

[.NET4.5.2] 背景工作另一選擇QueueBackgroundWorkItem

目前在Web上若要支援背景工作 例:圖片轉檔、資料轉入等離線工作,有幾種選擇,如:Azure WebJobsHangfire或進階點使用Azure Worker Role等。除了Hangfire(第三方套件)以外,其他2者需執行在Azure的環境上。而目前在.net4.5.2有另一選擇QueueBackgroundWorkItem

.NET 4.5.2內建的QueueBackgroundWorkItem 此功能與ThreadPool.QueueUserWorkItem一樣都是記憶體的序列,但不同的是它支援非同步await/async功能以及會自動保持與追蹤有多少個未完成的工作,並且在應用程式被關閉時(例:更新程式、IIS回收等)會試著延遲90秒直到所有工作完成,當然超過90秒後未完成的工作就會遺失。若你的背景工作是與交易較無關的功能,如發信通知,建議可以使用此API。
protected void Button1_Click(object sender, EventArgs e) { for (int i = 0; i < 100; i++) { string root = Server.MapPath("~/Log"); HostingEnvironment.QueueBackgroundWorkItem(ct => WriteFileLog(root, "Hello world!")); } } private async Task WriteFileLog(string root, string message) { FileStream file = new FileStream(root + "\\" + Guid.NewGuid().ToString("n") + ".txt", FileMode.Create); StreamWriter s = new StreamWriter(file)…

[AngularJS] 多個app在同一個網頁

圖片
在同一個網頁內若設定多個module,在預設情況下只會執行第一個設定ng-app的內容,第二個ng-app設定則不會執行,如下方的View內容
<div ng-app="app1" class="panel panel-primary">
<div class="panel-heading">Directive-Static Template</div>
<div ng-controller="myCtrl" class="panel-body">
Name:{{customer.name}} Address:{{customer.address}}
</div>
</div>

<div id="app2" ng-app="restrictApp" class="panel panel-info">
<div class="panel-heading">Directive-Restrict</div>
<div ng-controller="myCtrl" class="panel-body">
Name:{{customer.name}} Address:{{customer.address}}
</div>
</div>
app2的angularJs並不會被執行





使用clientCache快取靜態檔案

圖片
針對Client端的靜態檔案(js、css、圖檔等),在第一次瀏覽器載入時會對Server發出Request來下載,而在第二次載入時,同樣會再發出一次Request來詢問,並依Client及Server檔案的修改時間來判斷是否需下載。因為只有回應標頭內容,不用下載檔案內容,所以在第2次載入會明顯比較快。
  若這些靜態檔案若都沒有在修改的話,在IIS7以上可以透過web.config直接設定快取的模式及過期時間,來快取在Client端,這樣第2次載入時連Request都不會發出。
增加clientCache組態-設定 在system.webServer/staticContent下加入設定,cacheControlMode設定為UseMaxAge,並設定對應的屬性cacheControlMaxAge來設定快取時效,
如下快取10秒
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:10"/>

[AngularJS] Modal的Scope Bug

圖片
今天在使用ui.bootstrap.modal時遇到一個奇怪的問題,透過ng-modal繫結的資料在View可以呈現即時更新的資料,但在controoler卻無法取回。
程式如下:
html紅框內可正確呈現雙向繫結的資料

[AngularJS] 開發環境準備

圖片
這陣子在專案使用AngularJS開發程式,並在Nuget引用了相關套件,例:AngularJs、ng-grid、定義檔等.......,避免日後記憶衰退忘光光,將用到的整理如下:
1.AngularJS 完整的AngularJS檔案下,並包含其他模組,例:Route、Cookie...等

[Azure] 解決無法使用gmail的smtp寄信

圖片
在系統上作了一個通知機制是當發生例外時,會透過gmail發信給管理者。但上了Azure後,明明有例外,卻遲遲收不到來信.......。到gmail上的設定檢查後,才知道由於網站是放在新加坡與我們平常存取時的位置差太遠,所以判定為異常而遭拒無法發信。

[Azure] Instance資源分配

圖片
釐清一下Instance的資源是怎麼樣分配。以Basic的方案來計算,若建立3個Instance(VM),而記憶體設定為7G,並建立了3個網站。

在分配上如下表
InstanceRAMWebVM-17GWeb-1Web-2Web-3VM-27GWeb-1Web-2Web-3VM-37GWeb-1Web-2Web-3 參考來源http://msdn.microsoft.com/zh-tw/windowsazure/gg442342.aspx

http://social.msdn.microsoft.com/Forums/zh-TW/bc646281-b411-4584-907d-1098e21b7a1b/azure-instance-?forum=winazurewebsite

Visual Studio Online MsBuild出現無法載入Nuget組件

圖片
目前的專案會透過Visual Studio Online簽入後,自動執行建置動作並發佈到Azure。但今天在測試時一直卡在Online Build時會發生錯誤訊息,無法載入某個內部Nuget組件。

[EntityFramework] 查詢結果將字串轉成列舉

圖片
在EntityFramework5後若你希望Entity的欄位是列舉型別,預設支援數值欄位例:int16 int32 Byte等。但若欄位是字串時,該如何處理?
如下的列舉是對應的Char型別
public enum TrCodes { A = 'A', O = 'O', S = 'S', T = 'T', P = 'P', } 試著在查詢時將Entity的欄位轉成列舉


[EntityFramework] DbContext快取測試

圖片
針對DbContext在資料存取的內建快取機制作測試記錄。本文案例以建立一個DbContext為主來執行CRUD,可能會遇到的問題。


例1:直接以SQL更新或資料庫手動更新後,再查Entity的資料還是舊的 以下的程式在以SQL更新資料庫前,就先查詢該筆Entity。而預設的快取機制並不知道你的資料已異動,就算你再執行一次查詢,資料回來還是會是舊的 (更神奇的是用SQL Profiler看,是有執行SQL,只是未填入Entity)。


解決方法:使用AsNoTracking
以上面的程式修改成在第二次查詢時,使用AsNoTracking來直接查資料庫的資料而不使用DbConext的快取


[MVC] 自訂RadioButtonList

MVC若要使用Radio Button,預設的HtmlHelper只有RadioButtonFor方法可以使用,這是單一個Radio Button,所以若要呈現5個按鈕就要呼叫5次,或使用迴圈巡覽資料集來叫用。而針對顯示的文字及Html也須另外撰寫。針對這種寫了會令人在維護時眼花瞭亂的程式,最好的方式還是寫了一個Helper來解決。

改善前的作法 @foreach (var item in DataUtility.GetDatas()) { <label class="radio"> @Html.RadioButtonFor(model => model.ProductId, item.ProductId) @Html.DisplayFor(model => item.ProductName) </label> }

[Expression Tree] MSDN學習系列 3-使用運算式樹狀結構建置動態查詢

本系列的最後一篇文章,此篇要講的是如何使用運算式樹狀架構來建立動態 (Dynamic) 的 LINQ 查詢,並在執行時期產生對應的查詢方法。在開始先來講為何需要動態查詢? 假設我們有一個GridView呈現產品清單,但要提供使用者直接在每個欄位的標題點選作排序、飾選的功能。若要依使用者點選的欄位來查詢的話,程式需依欄位名稱來各別寫Where或Orderby,如下程式
private void TraditionQuery() { string sortColumn = "ProductName"; string filterColumn = "CategoryName"; string filterValue = "HTC"; IQueryable<ProductModel> data = ProductModel.GetDatas(); switch (sortColumn) { case "CategoryName": data = data.OrderBy(m => m.CategoryName); break; case "ProductName": data = data.OrderBy(m => m.ProductName); break; } switch (filterColumn) { case "CategoryName": data = data.Where(m => m.CategoryName == filterValue); break; case "ProductName": data = data.Where(m => m.ProductName == filterValue); break; } }
目前只針對2個欄位作…

[多國語系]-前端驗證測試記錄-後續作法

圖片
針對前篇測試,在參考相關的文章有提到:
Culture 屬性: 負責判定與文化特性相關功能的結果 (例如: 日期、數字和貨幣格式等)。
UICulture 屬性: 負責覺得要為網頁載入哪一國的資源檔。
根據以上的特性,程式調整如下:
1.南非語系維持en-ZA不變 針對英文語系的處理,在設定CurrentCulture時,設定成en,而設定CurrentUICulture則依使用者設定的語系,如下程式判斷en-開頭則取en來使用。
void MvcApplication_BeginRequest(object sender, EventArgs e) { if (CurrentCultureName.StartsWith("en-")) System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en"); else System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(CurrentCultureName); System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(CurrentCultureName); }

[多國語系] MVC ViewModel自動載入語系資源-驗證訊息

圖片
繼前一篇[多國語系] MVC ViewModel自動載入語系資源,此篇要講的是把一些常用的驗證自動加上語系,例:Required、Range...等。在基本的情況下我們在Property冠上Required,只要使用者未填值下按下Submit就會出現內建的錯誤訊息,如下:
中文英文
而要加上自訂的語系的話則需要再指定ErrorMessageResourceName及ErrorMessageResourceType

改善目標不要設定語系名稱及語系型別 自動為驗證Property跟資源檔作結合

[Expression Tree] MSDN學習系列 2-修改運算式樹狀架構

圖片
繼上篇運算式樹狀架構,此篇要講的是如何修改運算式樹狀架構,預設的情形下,運算式樹狀架構是不可直接修改的.....嗯~~~有看沒有懂…對吧..XD,下列程式碼,就是一個完整的樹狀結構,但你不可以直接去異動他任一節點,例如:將大於換小於、and換成or
Expression<Func<string, bool>> expr = name => name.Length > 10 && name.StartsWith("G");

[Web API] 如何使用Route Debugger對Routing偵錯

圖片
今天在測試Web Routing的設定時,感覺大海撈針…..找不出錯誤到底在哪?幸好MSDN剛好有篇文章在寫這個,順便記錄一下以免日後忘了..。
1.從Nuget加入 WebApiRouteDebuggerPM> Install-Package WebApiRouteDebugger 2.裝完後須調整設定 瀏覽 :http://localhostxxx/rd,會出錯下圖組件錯誤


[多國語系] MVC ViewModel自動載入語系資源

圖片
一般而言我們Mode的屬性若沒冠上[Display]的話,View會以該Property的名稱來顯示,而加上Display後,若需要加上語系的話,除了設定Name還要再多設定ResourceType,如下:

DRY原則     上方的程式碼整個看起來就是令人眼花瞭亂,每個Property要冠上Display及設定ResourceType,且差異的部份只Name的指定,程式碼重複的部分一大堆...。根據DIY的原則....不不不..是DRY的原則,不要一直重覆你自已,我們需要更乾淨的作法。
改善目標 為了保持較乾淨的類別及加速日後的開發與維護,列出以下幾點需求:
不要設定語系名稱及語系型別每個屬性不要冠上[Display]自動為Model的Property跟資源檔作結合

[Expression Tree] MSDN學習系列 1-運算式樹狀架構

圖片
最近參考一些較知名的Library,例:Automapper、DynamicQuery..等等,都有用到大量的Expression來作動態查詢,由於Expression認識的不夠深,以致在擷取某些程式碼來修改時都覺得很吃力......=.=。而這兩天剛好看到msdn有提供一系列的文章,想說將它整個練習一遍,並將所理解的記錄下來 ps:其實是轉化自己較容易懂的語言XD。

什麼是Expression Tree?
就是將程式碼當作樹狀結構的資料,並可以動態修改Runtime的程式碼、動態查詢及取得程式碼中的相關資訊。

[多國語系]-前端驗證測試記錄

圖片
測試目的    讓前端通過多國語系的數值與日期驗證,參考文章1文章2後,另作一個測試記錄,ps:結果預告:失敗
1.Nuget加入套件:jQuery.Validation.Globalize2.撰寫一個共用方法取得目前的語系名稱

3.引用相關Script ps:需照順序 紅框處為以語系加入對應的js

4.設定前端global的文化為目前的語系


上述步驟完成後,開始測試相關案例,以中文、英文及南非三個為語系選項
1.日期-格式化-d:為會依據不同的語系呈現yyyy/MMM/dd or dd/MM/yyyy
測試結果—>OK
2.日期-格式化-yyyy-MM-dd:此為配合html5的日期格式
測試結果—>Fail
原因:yyyy-MM-dd格式無法通過多國語系的驗證

解決方法:擴充date驗證方法,使用統一格式yyyy-MM-dd的方式驗證

[TechEd-2014-North-America] Visual Studio Power User: Tips and Tricks

圖片
針對此Session,個人覺得常用的一些實用技巧作memo
1.方案資料夾-將範圍設定在此
beforeafter

ChromeExtensionTemplate in Vs2013

圖片
今天本想參考此篇文章來玩一下程式產生器,但在裝完必要條件The latest Sidewaffle VSIX 後,發現在新增專案時有一個Chrome Extenstion的樣板可以使用,一時手癢寫了一個Hello World來玩玩

簡單好用的TreeGrid

圖片
最近寫的程式需要呈現在表格上階層資料關係,找了些相關的PlugIn後,發現TreeGird此PlugIin,完全符合我的需求:
1.載入的.js及.css很少且很輕量,只需載入bootstrap,而不用載入其他太多的PlugIn ps:我目前找plugIn也是以此方向去找。
2.Script撰寫簡單,只需一行程式$('.tree').treegrid();。
3.階層的定義方式很直覺,直接以Table並在tr加上css名稱來區分上下關係。
4.直接定義在HTML上,內容調整相當容易
5.事件支援 如:展開/收合
6.狀態保存(需引用jquery.cookie.js)


開始介紹如何使用前,先看一下範例成果

Applying S.O.L.I.D. Principles in .NET/C#-Note

[VS2013]解決-發生例外狀況,這可能是某個擴充功能造成的

圖片
前言   如下圖,只要專案一打開,所編輯的第一個html就會出現警告視窗,但關掉就不會再發生。本來想說一天出現個一、二次無傷大雅(其實是懶得早答案XD)。

ProxyCreationEnabled=false 測試

前言 這幾天在偵錯EntityFramework時都會看到Entity的型別為Entity+編碼後的DynamicProxy類別,好奇的去找一些文章來瞭解它到底有什麼作用。

優點 1.在Lazy Loading=true,可以讓導覽屬性延緩載入 例:RoleEntity底下有一個ICollection<User>屬性。
2.用來追蹤變更資訊-->這點我找不到要用在哪及如何使用,找到的說明好像也是.net4.5前才有一些ObjectStateManager的應用..。


缺點 1.WebAPI序列化會發生失敗。
2.無法在分散式架構快取。
3.取用導覽屬性時若一開始忘了下Include(),而在foreach又取導覽屬性的資料,會造成大量的查詢次數
ps:這點我還常犯=.=

foreach (var role in roleList) { foreach (var user in role.SYSUSER) { } }
將ProxyCreationEnable設為false有何影響? 1.若要取用導覽屬性的資料需自行下Include()。
2.Lazy Loading無法使用。
Ps:不知還有沒有其他潛在問題
針對自己在使用上的疑慮作了以下簡單測試 1.IQueryable to List後才執行查詢-->Yes
2.Include()是否取得到導覽屬性-->Yes,導覽屬性會使用join的查詢方式,一次載入
3.Entity的異動是否可以更新-->Yes
4.導覽屬性的集合資料是否可以刪除,例:將某一使用者從角色中移除—>ok
static void Main(string[] args) { using (MyEntities db = new MyEntities()) { db.Configuration.ProxyCreationEnabled = false; v…

Entityframework-撞牆整理

圖片
前言針對最近一些撞牆的問題作一下筆記....
1.關閉初始化檢查:   由於資料表是由同事在負責建立、修改,所以我並不會作去相關的資料表異動。但我的DbContext使用的是CodeFirst的方式來撰寫(並沒有使用edmx來產生poco),這樣的方式在DbContext初始化後第一次執行的命令,還是會作相關的檢查,例:資料庫是否存在、資料表是否存在、Mirgration的檢查等等...
以下為Trace Sql Profiler的截圖

成功沒有捷徑,一切還是照步來

昨天接到一個工作是要將某個網站上的資料匯出,該網站有提供Web API來取得資料,並也有相關的說明文件,照理說我若好好瞭解說明文件的話,應該一天內就可以搞得定.......,但實際上我卻多花了一天才搞定...............

簡單的線上程式預覽實作

圖片
這陣子一直在開發專案上會用到的一些共用Library,一開始因提供給同事使用的方法不多,所以都以Blog文章為主來告知,但隨著開發的功能越來越多,感覺這樣的方法越來越不適用....如下有會幾種情況:
1.我不是每個功能都會寫Blog… 較小的功能就懶的寫..XD
2.照著文章作但跑不出該程式的功能.......PS:個人文筆不太好,有時會少寫XD
3.原本的功能更新了,但文章沒更新....
4.當團隊成員一多的時候,Tranining會佔去很多時間,且教了也不一定會記起來...   針對上述目前想到是直接寫一個共用方法的線上範例及預覽原始碼程式,讓成員可以直接執行該程式的結果及將相關代碼直接複製回去,雖不一定是最佳解法,但至少第一步可以不用問我,直接看範例也應該可以知道如何使用。
介紹前先來看一下成果

範例學習-MVC Using CodeFirst

圖片
今天看到微軟提供了一個MVC+EntityFramework Code First的範例覺得還不錯,試了一下後,順道整理一下初次執行範例的一些注意事項:

1.打開專案後先從套件管理員執行套件還原



2.從套件管理員執行”Update-Database”



此動作是為了作第一次的資料庫建立動作及將Migrations內的更新執行到資料庫內



3.以上作完後即可執行範例桯式



ps:由於使用的是LocalDb,所以資料庫建立好並不是專案的App_Data內,而是在預設設定的路徑下
c: \users\[username]



參考文章

ASP.NET MVC Application Using Entity Framework Code Firsthttp://code.msdn.microsoft.com/ASPNET-MVC-Application-b01a9fe8
SQL Server 2012 Express LocalDB (SqlLocalDB) 深入剖析http://blog.miniasp.com/post/2012/09/03/SQL-Server-2012-Express-LocalDB-Quick-Start.aspx