Asp.net-Mvc

實體類型沒有定義鍵 - 程式碼優先

  • July 28, 2017

我是 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; }
   }
}

添加控制器

當我嘗試添加控制器時,它會出現以下錯誤:

錯誤

Id通常,如果屬性名為or ,則程式碼優先按約定隱式設置實體類型的鍵TypeName+Id。在您的情況下,TypeId它們都不是,因此您應該使用KeyAttribute或使用流暢的語法,使用EntityTypeConfiguration.HasKey 方法將其明確標記為鍵

我有同樣的問題。在找到適合我的解決方案之前,我重新啟動了 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 中的一個錯誤,因為可以存在同名的部分類和公共類。目的是允許程序員擴展部分類的定義。

引用自:https://stackoverflow.com/questions/16207967