1. 程式人生 > >18.C#:VS2010之EF框架新增edmx(自動跟蹤實體生成器):對映到資料庫表和程式碼實體類

18.C#:VS2010之EF框架新增edmx(自動跟蹤實體生成器):對映到資料庫表和程式碼實體類

在上一篇文章新增好EF資料庫模型的基礎上,為了生成表結構對應的標準類,使用自動跟蹤實體生成器,這裡主要記錄檔案命名注意事項

1.雙擊.edmx檔案,在介面的空白處滑鼠右擊,選中“新增程式碼生成項”,選擇“ADO.NET自跟蹤實體生成器”,會生成兩個.tt檔案

2.注意:其中沒有包含Context字串的那個檔案命名一定要注意,必須命名為有.edmx字尾的檔名+Entites.tt,比如.edmx為ABC.edmx,則此.tt檔案的完整檔名為:ABC.Entities.tt,否則無法生成正確標準類檔案

3.edmx的屬性調整(雙擊檔案開啟,單擊空白處就可出現):資料庫生成工作流改為:Generate Oracle Via T4(TPT).xaml(VS);名稱空間必須改為與專案一致或者與edmx所在的資料夾中的.cs檔案的名稱空間一致;DDL生成模板也要改為:SSDLToOracle(VS);儲存時轉換相關的文字模板:TRUE;應用延時載入:FALSE;生成時驗證:FALSE

4.生成之後,必須更改.tt檔案的配置格式為標準類格式,這個地方是用程式碼控制的,也就是說需要雙擊ABC.Entities.tt,開啟檔案,將裡面的程式碼修改為可以顯示為簡單類格式

5.這樣做的目的在於可以像看到自定義標準類那樣看到表結構對應的實體類,在大型專案中會讓層次更加清

新增對映關係注意事項:

1. 如果要在資料庫中新增表後使用,則必須先更新edmx和資料庫的對映

1)從資料庫更新模型:右擊edmx,開啟模型瀏覽器,任意一個對映實體或者頂層edmx上右擊後選擇“從資料庫更新模型”,然後連線(連不上則多連幾次,原因可能是安全性驗證問題),“新增”中選擇表,確定即可

2)修改表格對應實體名:這時從資料庫對映過來的實體名稱就是原表格名稱,需要更改為所需要的實體名:右擊專案中的edmx,選擇使用XML格式開啟

(右擊開啟方式可以看到),搜尋資料庫的原表名,全部替換為所需要修改的實體名;然後用“模型瀏覽器”,找到對映實體名,在屬性中修改為需要的名稱(右擊可以看到屬性)

3)修改表格欄位對映過來的實體屬性名:直接對映過來的欄位全部是大寫的,這裡修改為每個單詞首字母大寫:可以用“模型瀏覽器”(雙擊開啟的預設方式),找到對應對映實體(此時實體名和表名是一樣的,這裡也可以在屬性中修改實體名),點選下拉欄位,點選欄位,到屬性裡面去修改。然後右擊edmx,選擇“執行自定義工具”,即可生效。如果先以XML形式開啟修改了之後,還是得以預設方式開啟再次修改,沒有這個必要。

4)生效:右擊xxx.edmx下面的xxx.Entiies.tt檔案(xxx是檔名),選擇“執行自定義工具”即可(必須步驟

注意:1.如果碰到資料庫表的欄位和對映的實體的屬性型別不一致,只能找到對應對映實體,右擊選擇“屬性”,到屬性裡面去修改,只能在屬性中修改欄位型別,不可以直接在下面的對映關係裡面修改

            2. 如果出現一些表名命名錯誤,比如BatchSpecialTypeImport寫成了BatchSpecialTypeImport1,在edmx裡面已經修改正確了還是報錯,可能就是沒有重新執行xxx.Entities.tt檔案的執行自定義工具,導致xxx.Entities.tt的子目錄xxx.Context.cs沒有正確修改

            3.如果運行了xxx.Entiies.tt自定義工具後屬性名還是沒有智慧提示為小寫,則可以先關閉.tt檔案,開啟其下拉對應的實體類,再關閉,再多執行兩次xxx.Entiies.tt就可以了(可能是vs反應沒那麼快)