2019/11/23

在EF中執行SQL查詢 (Execute Raw SQL Queries in Entity Framework)

EF(Entity Framework)是微軟提供的佛心ORM工具,讓菜鳥開發人員得以在操作後端資料庫時,可以在Visual Studio中以物件的方式選擇資料庫內的表格與欄位,減少手動組合SQL指令發生的錯誤。但若資料庫因正規劃切割成數十個表格,或者主索引鍵規劃不良、有許多子查詢時,檢查EF組合出的SQL語法,其時間成本可能遠遠超過原來所預期。

遇到這種情形,筆者可能會選擇設計View、資料表函數或者預存程序,在EF內加入此物件。但要記得回傳的查詢結果必須要有Key值。

另一種情形是開發者無法(或沒有權限)在DB上新增物件。可能的方案是直接在EF下 SQL語法。從舊有的程式翻修時,會遇到有複雜join的情形,靠EF Mapping可能會有錯。這時候可以手動帶參數進去。

using (var ctx = new SchoolDBEntities())
{
    var student = ctx.Students
                    .SqlQuery("Select * from Students where StudentId=@id", new SqlParameter("@id", 1))
                    .FirstOrDefault();
}
但這樣的sql如果選取的欄位名稱與EF內的物件名稱衝突,還是會產生Exception。

2019/11/5

The English Patient


記得學生時代在電視上看過電影「英倫情人」(The English Patient)的電視廣告,當中艾莫西與嘉芙琳翩翩起舞的情景,令人至今難忘(現在是2019,23個年頭過去了),那段配樂尤其迷人。

後來買了得利影視的正版VCD,也買了蓋布瑞·雅德作曲的原版原聲帶,但很奇怪,就是找不到跟當初電影預告片段裡的那段配樂。

後來電影看得多了,猛然發現,那時候的很多電影,似乎廣告曲跟片子本身的配樂,根本不是同一首! 是後製趕工不及,還是甚麼原因,就不得而知了。


現在有YouTube 跟Google可查,拜讀國外網友留言之後,總算解開心中迷惑。

英倫情人的這段廣告配樂,來自Randall Meyers(1955-) 為1993年挪威電影 Telegrafisten (電報員)創作的 Love Theme Rolandsen and Elisa 。電報員這部片由挪威作家 Knut Hamsun( 克努特·漢森)的作品 Dreamers (Sværmere) 改編而來,雖然入圍過奧斯卡最佳外語片,但鎩羽而歸。
以世俗的角度來看,影響力遠不如後來的英倫情人。

英倫情人配樂作曲者蓋布瑞·雅德所做的曲子,融合了匈牙利民謠與北非的意象,還有巴哈的郭爾堡變奏曲,與劇情緊密鑲嵌,但用現在的話來說,劇透可能太強烈了些。發行商Miramax不知為何,改選一首中規中矩代打的主題曲。這首代打跟英倫情人裡第三首配樂的前幾小節很相似,後面則屬於中規中矩,有些巴洛克音樂的色彩,卻陰錯陽差的留在不少觀影人的記憶中,成為一場美麗的誤會。

Randall Meyers的名字也因此跟這部影史不朽的鉅作(得了快九項奧斯卡啊),奇妙的連結在一起。

當年冷調沉默的考古學家,在營火晚會凝視著述說希羅多德《歷史》的知性女子─卻未體認到不可踰越的邊界之存在。英倫情人的演員們後來在2016年的羅馬電影節重新合體[連結]。即使要角的容貌隨歲月轉變,神采彷彿還說著故事。「且就虛無醒世夢,返於曲折復人情」。回想電影與現實的虛實重合,多少是感觸? 多少是投射? 比例只有觀影者,本身能夠衡量。