Jen

Entity Framework學習筆記(二)

 

最近有很多心得想寫,但又不知從何寫起,然而半個月沒文章真的還蠻對不起自已,再怎樣都要喇個一篇出來。最近還翻到去年2月,前公司幫我投稿adm的文章,我都完全忘記有這回事,雖然不是什麼功成名就的大作,現在回想起來倒也蠻新鮮的。(怕將來連結失效,卡個圖記念一下。什麼!? 要閱讀全文還要加入會員。)















【oracle 與 ef 的bug】
Entity Framework的edmx檔案會包含以下三個XML的Section,而經過編譯之後,會產生3個ssdl , csdl , msl 檔案,而主要的解釋如下:

SSDL:定義資料庫物件的Schema。
CSDL:定義概念性的資料模型,可以把這個看成Model Class。
MSL:SSDL 及 CSDL 之間的對應。

而我最近是用EF與Oracle 做整合,一來我對Oracle不熟,還遇到蠻多小問題的,只好去天瓏朝聖,敗一本Oracle DBA的書,好好瞭解一下整個Oracle架構,表達尊敬之意。講到這個,我就想講,學習一個新的不管是技術還是工具(Oracle對我來說就是工具),最好是從頭開始瞭解,不要只是看看網路上的sample,做過幾遍,就認為會了、熟了,你可以看輕自已,但不要看輕任何一門技術,好好的買本書來看,至少表現出該有的尊重,相信它也會給予要入門的你最大的空間及方便,就像一夜情是不會有什麼好結果的(誤)。

【bug】
Entity Framework與Oracle Table物件是有個小Bug,熟Oracle的人都知道,要設定Table Auto_increment 的主鍵須透過 sequence 及 trigger 互相搭配,不像MS Sql,只要設定主鍵的屬性即可,而Entity Framework的bug 就是當 Insert 一個Entity Framework的物件到Oracle去的時候,主鍵的值並不會馬上更新到Entity Framework的物件中主鍵屬性的值,這是因為透過visaul studio 工具產生edmx檔的時候,SSDL並沒有完全正確的產生,只要修改一個屬性,告訴Entity Framework這個是主鍵,在新刪、修改時要特別去更新它。

SSDL 主鍵的屬性 StoreGeneratedPattern
  • None
  • Computed : 在新增、修改的時候會更新物件所有的屬性。
  • Identity:只有在新增的時候會更新物件的所有的屬性。
用工具產生的SSDL並不會自動產生這個屬性,所以要手動設定。

我本來是放棄去解這個問題,也跟同事討論出替代方案,就是用guid檔主鍵值,心裏總覺得不踏實,但更讓我覺得不踏實的是,我對Entity Framework 的架構及原理完全不瞭解,只會靠者工具產生檔案,所以我開了MSDN,從頭K到尾,從edmx檔案組成、life time. ..等等都看過一遍,當我瞭解 SSDL、CSDL及MSL是幹嘛用的時候,這個問題就輕鬆的解決了,所以你說讀書重要不要,書到用時方恨少,有讀有保佑,平常要多讀一些MSDN,這個問題也不會卡了,所以真的不要只會看網路的Sample Code,共勉之~

0 意見: