2012-08-12 127 views
3

我是ASP.net MVC的新手。我正在嘗試創建一個視圖模型來顯示數據連接。下面是一些示例代碼:如何正確使用視圖模型

public class Person 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 

    public ICollection<Relative> Relatives { get; set; } 

} 

public class Relative 
{ 
    [Key] 
    public int ID {get; set; } 
    public Person Person { get; set; } 
    public RelationType RelationType { get; set; } 
} 

public class RelationType 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Description { get; set; } 
} 

public class PersonViewModel 
{ 
    public string Name { get; set; } 
    public ICollection<string> RelativeNames { get; set; } 
    public ICollection<string> RelativeTypes { get; set; } 
} 

public class PersonContext : DbContext 
{ 
    public DbSet<PersonViewModel> people { get; set; } 
} 

當我嘗試創建通過Visual Studio我的控制,我得到以下錯誤:

無法檢索元數據PersonViewModel。在生成期間檢測到一個或多個驗證錯誤: EntityType'PersonViewModel'沒有定義密鑰。定義此EntityType的關鍵字。

回答

3

錯誤是不言自明的。您需要在PersonViewModel中添加一個Id字段,該字段必須用[Key]修飾,正如您在上述類中正確完成的那樣。

+0

啊。我只是困惑。我從來沒有用主鍵指定視圖;我在考慮SQL Server視圖。 – 2012-08-13 00:42:41

+2

哦,ViewModel絕對不是Domain Model。看到[做viewmodels需要鍵?](http://stackoverflow.com/questions/20816115/do-viewmodels-need-keys) – Aigori 2014-08-21 15:22:04

1

查看模型是便於在控制器和視圖之間傳遞數據的類。你得到這個異常的原因是因爲你正在將PersonViewModel類傳遞到你的dbSet中。除非PersonViewModel類具有相應的表格,否則不能這樣做。在這種情況下,PersonViewModel不應該是一個視圖模型,而應該是一個實體,一個模型類來表示你的表格。

通過看你的代碼,我猜你有個人在你的數據庫中的表相對 因此你務必做好以下

public class PersonContext : DbContext 
{ 
    public DbSet<Person> Person { get; set; } 
    public DbSet<Relative> Relative { get; set; } 

} 

,並通過人與你的DbContext類的相對性填充PersonViewModel。這可以在控制器內部或存儲庫類中完成,如果有的話。

+0

我試圖使用Code First來生成表。我有或沒有佈局可能嗎? – 2012-08-13 00:14:35

+0

是的,你有正確的代碼。請看這裏的例子http://msdn.microsoft.com/en-us/data/gg685467.aspx – haroonxml 2012-08-13 00:16:40

+0

我遇到了類似的問題。您的鏈接顯示瞭如何創建模型,控制器,DbContext以及如何創建腳手架的示例。我無法看到這與創建ViewModel如何與每個問題相關。我錯過了什麼嗎? – Gravy 2013-06-07 10:58:45

相關問題