Browse by Tags

閒聊:用 LINQ 還是自己寫 SQL?
前陣子在網路看到「該靠 EF(LINQ)還是自幹 SQL 語法(甚至一律轉成 SP)」 的討論,我的「個人偏好」挺明確-CRUD 可靠 EF/ORM 省工,複雜查詢或操作則走 Dapper 自己寫 SQL。不過它只算是「偏好」,其效益因客觀條件劇烈變動,若無視開發者背景、人力資源配置、系統需求等各種因素,無限期支持 OOO 一定比 XXX 好,肯定會在特定情境踩坑。既然沒有一體適用的「建議」,我就只從開發老人的角度聊聊決策理由及優劣分析,不陷入追求「最佳解」的迷思。(充其量只會有符合某種情境的「最適解...
Posted 08 May 2017 07:29 AMJeffrey | 7 comment(s) 15,576
Filed under: ,
為EF連線字串加密的簡單範例
依一般資安準則,在設定檔使用明碼儲存連線字串是不被允許的,連線字串加密是基本要求。 雖然用反組譯.NET組件破解加密字串不是什麼難事,但駭客至少得先找到檔案拿到組件檔(DLL)才能動手,相較之下明碼連線字串就簡單多了,用關鍵字掃掃硬碟、備份媒體就能抓出一大把,不費吹灰之力蒐集到資料庫帳號密碼,很可怕吧! ASP.NET 2.0起,web.config內建 connectionStrings加密功能 ,但它綁死機器,必須解決Web Farm機器間的同步,且只能透過aspnet_regiis工具程式操作...
Posted 28 November 2015 03:12 PMJeffrey | with no comments 7,889
Filed under:
EF日期欄位之JSON序列化時區問題
註:閱讀本文章前有個先修課程,需知道.NET DateTimeKind如何影響Json.NET序列化結果,不熟悉的同學可以看 補充教材 、 補充教材2 依先前研究心得:將JsonSerializerSettings指定DateTimeZoneHandling.Utc可以避免DateTimeKind.Local被轉成「yyyy-MM-ddTHH:mm:ss.fffffff+08:00」,統一採用「yyyy-MM-ddTHH:mm:ss.fffffffZ」UTC時間格式方便前端處理,但遇上DateTimeKind...
Posted 20 November 2015 07:11 AMJeffrey | with no comments 3,721
Filed under:
可彈性支援Transaction的EF資料異動方法
考慮以下DataHelper靜態型別,有AddWorkItem及AddDataGroup兩個方法透過Entity Framework新増資料: public class DataHelper { //使用統一的靜態函式建立DbContext物件,避免自行建構 public static BBDPEntities CreateDbContext() { //正式應用時,設定檔之連線字串應加密 //在此進行讀取設定並解密以建構DbContext,細節待日後介紹 return new BBDPEntities...
Posted 19 November 2015 06:30 AMJeffrey | with no comments 4,488
Filed under:
組裝動態LINQ條件的利器-LINQKit
昨天提到實務上查詢條件多半由使用者動態決定,往往得靠SqlQuery或Dapper配合 WHERE條件字串動態組裝 搞定。(提醒:SQL語法可以用串接的,使用者輸入內容務必使用參數嵌入)但如此就得放棄LINQ .Where()的強型別優點。介紹一個好物,讓你可以兩者兼顧- LINQKit 。 老樣子,用NuGet就可安裝,查詢關鍵字請填"LinqKit": 最新版的LINQKit需要EntityFramework 6.1.3以上,但依其運作原理,EF5應該也適用,等遇到再說。...
Posted 23 October 2015 07:50 AMJeffrey | 6 comment(s) 12,830
Filed under: ,
EF SaveChanges()未寫入Entity資料異動
Entity Framework等ORM技術讓更新資料表動作變得異常簡單。 在ADO.NET時代,若要更新Product資料表某一筆資料的兩個欄位,得先想好SQL指令建立SqlCommand,接著逐一新増SqlParameter @p1, @p2, @k1, @k2 並傳入各參數值,: var sql = "UPDATE Product SET Col1 = @p1, Col2 = @p2 WHERE ColPK = @k1 AND ColPK2 = @k2"; SqlCommand...
Posted 22 October 2015 05:04 AMJeffrey | 1 comment(s) 8,032
Filed under:
控制EF的Transaction範圍
被問到在EF環境要如何控制將某些DB操作包含在Transaction範圍內、將某些排除在外? 整理成簡單範例方便說明。 範例程式碼共有三段DB操作,第一段是寫入追蹤資訊到ActLog資料表、第二、三段則是各寫入一筆Player資料,為了模擬交易Rollback情境,故意讓兩筆Player的Primary Key相同。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using...
Posted 19 December 2012 09:15 PMJeffrey | 5 comment(s) 20,266
Filed under:
Entity Framework 4的單複數自動識別功能
Entity Framework 4增加了一個新功能--Pluralization,在Entity Data Model Wizard中能偵測資料表名稱的單複數性質,以便在產生EF類別時貫徹"EntityObject名稱用單數,ObjectSet<EntityObject>名稱用複數"的原則。也說是說,如果資料庫有個資料表名稱是User,則個體類別名稱會是User,集合類別是Users;但如果資料表名稱本身已經是複數,例如: Fishes,一樣會個體類別名稱會用單數Fish...
Posted 26 July 2012 07:28 AMJeffrey | 1 comment(s) 8,275
Filed under:
Entity Framework Model物件之Json.NET還原問題
應用ASP.NET MVC時,透過ActionResult傳回Entity Framework資料物件的JSON格式,接收端試著用Json.NET解析卻發生錯誤! 研究發現,在ASP.NET MVC Action中以return JSON(someObject)方式傳回JSON字串時,會使用JavaScriptSerializer進行序列化。換句話說,問題出在"使用JavaScriptSerializer序列化Entity Framework資料物件,再以Json.NET反序列化還原"...
Posted 06 July 2012 07:46 PMJeffrey | 1 comment(s) 7,732
Filed under: ,
ODAC-在Entity Framework加入其他Schema的Table
得知Oracle推出正式版Entity Framework元件後,ODP.NET及System.Data.OracleClient就被我打入冷宮,專案需要存取Oracle時幾乎都改用EF處理。 今天遇到新狀況: 有個Oracle資料庫提供了讀取權限的專屬帳號(例如: NRMQRY),實際的資料表在另一個GB Schema中,但有GRANT SELECT權限。在專案新增了ADO.NET Entity Data Model、指定Oracle伺服器名稱、用NRMQRY帳號建好連線( 步驟參考 ),正準備要將資料表加入...
Posted 03 July 2012 07:35 PMJeffrey | 1 comment(s) 5,627
Filed under: ,
解開Entity Framework資料重複之謎
昨天研究 EF View Primary Key錯置問題 時留下一個謎--當View Primary Key不正確時,出現離譜的查詢結果: T001 FBI - Fox T001 FBI - Fox T002 Bloggers - Jeffrey T002 Bloggers - Jeffrey T002 Bloggers - Jeffrey T002 Bloggers - Jeffrey T003 Avengers - Captain America T003 Avengers - Captain...
Posted 29 June 2012 07:52 PMJeffrey | with no comments 5,784
Filed under:
Entity Framework的View Primary Key錯置疑雲
底下是一個重現問題的環境描述,細節頗多,我盡量長話短說。 假設在SQL Server上有三個Table,Player、Team及Membership,分別用來儲存人員、團隊及團隊成員隸屬關係,如下圖: 接著,我用Team LEFT JOIN Membership再LEFT JOIN Player的方式,產生一個View,用來產生團隊名稱與成員姓名的清單,如下圖: 接著,我們在Visual Studio 2010中新增一個ADO.NET Entity Data Model(.edmx),將Team...
Posted 28 June 2012 09:55 PMJeffrey | 1 comment(s) 8,031
Filed under:
【茶包射手日記】EF4 StoreGeneratedPattern設定無效
Entity Framework有個 Store Generated Pattern屬性 可因應新增資料庫欄位採自動跳號的需求。 今天測試時發現該設定不管用,新增至資料庫時持續傳回Primary Key重複錯誤,顯示設定未生效。爬文發現這是EF4的 Bug (原本預期已在VS2010 SP1修復,看來不然),目前知道的解決方法是在Solution Explorer的edml項目按右鍵View Code叫出edmx,直接修改SSDL XML,自己補上StoreGeneratedPattern Attribute...
Posted 20 July 2011 07:29 PMJeffrey | 2 comment(s) 7,629
Filed under: ,

搜尋

Go

<December 2017>
SunMonTueWedThuFriSat
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication