2013-04-25 46 views
10

我是新來的MVC以及實體框架。我搜索了很多並發現了幾個類似的問題(例如Entity Type Has No Key Defined),但它們不能解決我的問題。實體類型沒有定義鍵 - 代碼優先

namespace MvcAppInvoice.Models 
{ 
    public class Customer 
    { 
     public int CustomerID { get; set; } 
     public string FirstName { get; set; } 
     public string SurName { get; set; } 
     public virtual CustomerType Type { get; set; } 
    } 

    public class CustomerType 
    { 
     public int TypeId { get; set; } 
     public string TypeName { get; set; } 
     public virtual ICollection<Customer> customers { get; set; } 
    } 
} 

Add Controller

當我嘗試添加它提供了以下錯誤控制器:

Error

回答

14

通常情況下,代碼首先按照慣例隱含設置了實體類型的關鍵,如果屬性名爲IdTypeName+Id。在你的情況下,TypeId既不是他們,所以你應該明確地標記爲關鍵,使用KeyAttribute或流利的語法,使用EntityTypeConfiguration.HasKey Method

+0

我按照你的建議進行了修改,但是即使它出現同樣的錯誤:請參閱編輯 – DevT 2013-04-25 07:30:47

+1

這應該有固定的錯誤。也許你應該重建解決方案,使其工作 – archil 2013-04-25 07:32:01

+0

後重建其作品...謝謝..... :) – DevT 2013-04-25 07:34:33

1

我有同樣的問題。在我找到適用於我的解決方案之前,我重新啓動了該項目3次。我有一個公開課,我手動創建了名爲UserContext。當我運行嚮導來添加一個ADO類時,該向導生成了一個UserContext的部分類。我刪除了我的usercontext類,並修改了VS爲我生成的類。

namespace UserLayer.Models 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public class UserContext : DbContext 
    { 

     public DbSet<UserDetail> UserDetails { get; set; } 
    } 
} 

現在它可能沒有修改工作。也許刪除我的課程版本可能會有用。我不知道。在我反覆嘗試添加控制器時遇到了您的錯誤。我懷疑這是VS2012中的一個錯誤,因爲可能存在部分類和同名的公共類。目的是讓程序員擴展部分類的定義。

1

添加命名空間

using System.ComponentModel.DataAnnotations; 

您的客戶ID 添加鍵屬性這樣

[Key] 
public int CustomerID { get; set; } 

然後構建應用程序,並嘗試添加控制器。這將起作用

0

運行選定代碼生成器時出錯無法檢索未定義鍵的實體類型的元數據。

  • 一個更重要的SQL表只需要[ID]那麼實體,如果你使用像[菜單ID]它 不會等主鍵 框架將正常工作。
  • 你應該因爲後1鍵]增加其增量這 爲什麼

型號

[Key] 
     [Column(Order = 1)] 
     public int RoleIdName { get; set; } 

然後在模型,該模型是關鍵,列順序

  • 列順序= 1添加驗證建立這個後創建一個控制器在實體框架下工作它將工作

    我希望它有幫助。

  • 相關問題