11

我開始必須使用那些使用.NET中真煩一些命名約定(表名開始與指定的業務領域幾卦與現有數據庫的新應用表,列名以表格trigram開頭,trigrams以大寫字母開頭,並用下劃線等分開)。更改實體和屬性名稱在數據庫首先

我希望做的是寫一個簡單的重命名規則(這是爲尋找最後的下劃線一樣簡單,之後採取一切),並在實體框架應用它。我並不想在編輯器中逐一編輯名稱,特別是因爲數據庫可能會更改,我不想多次執行。我使用數據庫優先(因爲數據庫已經存在,它是「主」),和EF 4.x DbContext生成器,它的工作非常好,開箱即用(雖然有嚴重命名的類和屬性) 。

我編輯了T4模板,以便重命名生成的實體和屬性,但是當我嘗試執行任何請求時,DbContext對象無法找到與我試圖請求的實體相匹配的表以及I得到以下例外:

實體類型[實體名稱]不是 當前上下文的模型的一部分。

這很明顯,爲什麼它沒有找到表:什麼都沒有告訴它如何匹配實體名稱和表,因爲我在飛行中更改它。 我讀過,我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加說明,但這不會在Database First中使用(並且默認的T4模板會在其中添加一個異常,以防萬一)。

所以現在我卡住了,我不知道如何指定匹配。

這裏有幾個想法我有,但不知道這是否是正確的或可行:

  • 使用「複數/奇異的」 API來改變實體的名稱?聽起來像一個骯髒的解決方法。但它可能工作(儘管沒有嘗試)。
  • 尋找一種即時編輯EDMX文件的方法。
  • 事後編輯EDMX,但它可能會在編輯過程中設計師複雜(,然後執行工具來改變EDMX,然後運行自定義工具來重新生成實體的DbContext ......而今天我只是在設計編輯)。
  • 使用代碼優先(因爲它似乎更容易使用比表名不同的實體名稱,穿過的DbContext類屬性或指令),但它聽起來就像它不會是更加複雜與現有數據庫中使用它。

任何想法?或者我錯過了什麼?

回答

7

您將無法使用T4變換這一點,只要你想改變實際.edmx文件的內容映射你的實體店的名字(與討厭的前綴)到您的消毒概念實體名稱。

相反,你最好寫一個應用程序,它需要一個.edmx文件作爲輸入和概念模型標籤下進行消毒的名稱並修改映射名稱,以反映已消毒的名字。我知道這是你的第三選擇,如果可能,你想避免這種情況,但這是最直接的方式。請記住,只有在添加新表格或列時才需要運行此工具。

+2

我害怕得到答案:)。我希望我錯過了一些東西。似乎有人已經完成了該工具:http://blog.cincura.net/228749-making-names-of-entities-or-any-identifiers-in-entity-framework-model-code-and-developer-friendly - 不是大寫/ –

相關問題