2012-07-11 98 views
0

我已經定義了一個接口:無法創建EF生成的DbContext類控制器

public interface ICMDBContext 
{ 
    DBSet<Building> {get;} 
    DBSet<Room> {get;} 
    more DBSet methods... 

    string Save() 
} 

我有產生的DbContext名爲CMDB_DataModelContainer類。

我有一個部分類CMDB_DataModelContainer它實現ICMDBContext它看起來像這樣(是的,兩者在同一個命名空間):

public partial class CMDB_DataModelContainer : ICMDBContext 
{ 
    string Save() { implemenation... } 
} 

一切編譯所有罰款和花花公子,但是當我嘗試創建一個控制器和使用CMDB_ModelConatiner作爲上下文類(創建一個強類型的控制器)我得到的錯誤

有錯誤發生「CMDB.Domain.Models.CMDB_DataModelContainer」。嘗試重建您的項目。

我刪除了部分類,並能夠創建控制器。任何想法爲什麼會發生?

要添加,DBContext類位於單獨的項目中。

它是在一個單獨的項目並不重要。我在同一個項目中創建了一個包含DBcontext類和MVC3應用程序的測試項目,但仍然不成功。

我想問一個問題,如果有人在使用Model第一種方法時實際設置了存儲庫。我發現自己遇到問題後,嘗試應用這種模式時,首先使用模型。

如果您想重新創建問題,請創建一個MVC 3(或4,我使用了3)。這是我爲自己重新創建測試所做的。

添加一個新的ADO.Net實體數據模型。

  • 創建兩個實體:塔克和灌裝
  • 「名稱」標屬性添加到每個。
  • 添加關聯m < ---> m
  • 在models文件夾中創建一個名爲「Partial」的新文件夾。
  • 添加一個新類 - 該類應該與Context類相同(如果您保留默認名稱,它應該是Model1Container)並且位於相同的命名空間中。

例如

public partial class Model1Container 
{ 

} 

- 添加一個新的控制器「TacoController」爲強類型對,你猜對了,塔可,並使用Model1Container作爲上下文類。 Voila轉載。是的,我喜歡炸玉米餅。

+0

什麼*文件名*包含你的'CMDB_DataModelContainer:ICMDBContext'? – 2012-07-11 17:09:47

+0

CMDB_Model.cs。我不相信C#中的文件名與Java中的文件名相關。我試着將文件重命名爲DBContext生成的文件。仍然沒有去。 – Erik 2012-07-11 17:58:27

+0

你在哪裏實現了你的DbSet屬性訪問器? (DbSet的實際代碼爲 {get ...})你也可能想在這裏使用IDbSet(可能沒有什麼區別,但它是抽象的,而不是你指的具體實現) – 2012-07-11 19:19:26

回答

0

正如您可能已經發現的,刪除(/重命名)部分類,創建控制器然後恢復部分類似乎是一個適當的解決方法。至於爲什麼:

一個時代的我想我發現了一些奇怪:一個新的聲明曾經出現在我會創造局部類文件:

public DbSet<Taco> Taco { get; set; } 

我只能猜測,VS是越來越糊塗了通過部分類文件 - 它發現你創建的部分類文件,沒有看到DBSet聲明,嘗試添加它,然後變得眩暈,因爲這是太多玉米餅。

Chris