2013-08-05 59 views
0

我想使用EF5(數據庫第一種方法,因爲有一個現有的數據庫)更新項目在ASP.NET MVC4中工作。我在VS2010中這樣做。EF 5.x DbContext生成器 - 命名空間問題

我按照example中的步驟操作。

這些是我採取的步驟:

  • 建立一個新的MVC4項目簡稱Project.NET
  • 創建實體數據模型作爲ProjectModel.edmx
  • 連接字符串保存爲項目實體
  • 模型名稱空間設置爲ProjectModel
  • 添加一個名爲ProjectModel.tt

所以畢竟,一個EF 5.x中的DbContext發電機組項目,它創造了由EF使用的類;問題是這些類都是使用項目的根名稱空間創建的,而不是我提供的名稱空間。

如果我打開任何生成的類的,我得到一個錯誤列表由手動更改命名空間ProjectModel

我會很感激的任何想法固定。

更新: Project Structure 這是示出項目的結構,生成的代碼的一個例子,並且編譯器錯誤的屏幕截圖。

有什麼奇怪的是,似乎只拋出一個錯誤,基於結構的命名空間,所以在圖像Project.Models作爲命名空間創建一個問題,但如果我在別的如ProjectModels類型測試錯誤消失。當然,我可以更改所有文件上的命名空間,但每當模型更改並更新時,命名空間將被重置,並且錯誤將會返回。

This問題似乎與我所遇到的問題是一樣的,但不幸的是,唯一的答案就是建議檢查參考文獻;我相信我的很好,因爲System.Data.Entity和EntityFramework都存在。

更新2: 如果在代碼生成過程中沒有選擇所有表,那麼不會出現命名空間問題。我目前正在以20個表格間隔更新模型,儘管有400個表格,但我更想知道實際問題是什麼。我假設它是由於一個或多個表的結構或名稱,但我不確定是否有關於EF的表結構或命名方面的任何特定規則。

+0

作爲一個通用的標準,我沒有從你的問題中得到這個。如果您的類具有比您的應用程序的根名稱空間更具體的名稱空間,則應該將它們組織到文件夾名稱爲您的類所在的名稱空間的文件夾中。 – Jay

+0

是的,我試過讓它在一個單獨的文件夾和一個單獨的項目中。沒有幫助。 – achillesminor

+0

你能發佈更多關於你的項目佈局和生成的代碼的細節嗎? – Jay

回答

1

看起來您的項目是面向.NET 2.0的。右鍵單擊您的項目並選擇「屬性」。確保目標框架設置爲.NET 4或更高版本。

+0

它絕對設置爲.NET 4。 – achillesminor

0

看起來似乎有一個名爲系統的表與名爲空的.NET 系統衝突。我想我只需要將表格名稱改爲別的。

0

如果您不想更改數據模式,則可以配置實體框架以將表名映射到不同的類型/類。像this可能會有所幫助。

0

我通過使用屬性窗口設置.edmx模型屬性中的Custom Tool Namespace字段以及其下的兩個.tt文件的屬性來設置生成的類的自定義名稱空間。