2013-08-30 28 views
1

我正在使用實體框架5與MVC4一起使用Model First創建一個小型測試應用程序。無法爲具有基類的類創建MVC4控制器(從實體框架生成)

我有兩個項目,一個data項目和一個ui項目引用數據。

我有我的data模型MYModel.edmx它具有以下實體的

[ITEM] [BOOK][DVD] 其中「書」和「DVD」有抽象類「項目」的基本類型。

使用代碼生成,它爲這3個表和我的DbContext爲使創建了類:

public DbSet<Item> Items {get;set;}

不訪問「書」或「DVD的」創建任何DbSet。

如果我嘗試使用我的數據上下文和模型類的「書」,我得到以下錯誤

mynamespace.data.books is not part of the specified mynamespace.data.dbcontext class, and the mynamespace.data.dbcontext class could not be modified to add a dbset<mynamespace.data.books> property to it. (For example)

什麼是正確的方式去使用EF與基地創建一個新的控制器類型和模型,因爲我明確地做錯了什麼,我是否應該先使用Model?在這種情況下首先使用代碼並自己創建DBContext會更容易嗎?

+0

你創建你的模型,並還可以通過你的EDMX生成你的實體?它應該是一個或另一個。 –

+0

@ChrisHardie全部由EDMX生成 – JustAnotherDeveloper

+0

您的抽象類是由EDMX生成的? –

回答

1

我並不十分熟悉的模型第一次,但嘗試在mynamespace.data命名空間中添加此:

public class DVD : Item{ 
    //Put your DVD specific properties here 
} 

public class Book : Item{ 
    //Put your Book specific properties here 
} 

這裏不要添加主鍵,他們都將繼承項目Id主鍵,因爲在數據庫DVD和Book都存儲在Item表中。

然後,這兩個模型添加到您的上下文:

public DbSet<DVD> DVDs {get;set;} 
public DbSet<Book> Books {get;set;} 

一個很好的參考,以實現表每層次通過代碼優先可以在這裏找到,對不起,我不知道的任何型號的第一參考:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

+0

謝謝,這有很多幫助。我最終取消了我的EDMX,然後代碼優先,因爲它看起來效果更好。由EDMX生成的代碼並不精彩! – JustAnotherDeveloper

0

我有一個相同的問題,但我不知道是什麼原因造成的。所有你需要做的是:

  1. 編譯項目
  2. 右鍵單擊控制器文件夾添加控制器
  3. 在數據上下文類,添加控制器對話框中手動鍵入您的上下文,然後單擊添加

希望它能幫助

相關問題