EntityType не имеет ключевой ошибки

Контроллер:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcApplication1.Controllers
{
    public class studentsController : Controller
    {
        //
        // GET: /students/

        public ActionResult details()
        {
            int id = 16;
            studentContext std = new studentContext();
           student first = std.details.Single(m => m.RollNo == id);
            return View(first);
        }

    }
}

Модель DbContext:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace MvcApplication1.Models
{
    public class studentContext : DbContext
    {
        public DbSet<student> details { get; set; }
    }
}

Модель:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcApplication1.Models
{
    [Table("studentdetails")]
    public class student
    {
        public int RollNo;
        public string Name;
        public string Stream;
        public string Div;
    }
}

Таблица базы данных:

CREATE TABLE [dbo].[studentdetails](
    [RollNo] [int] NULL,
    [Name] [nvarchar](50) NULL,
    [Stream] [nvarchar](50) NULL,
    [Div] [nvarchar](50) NULL
)  

В global.asax.cs

Database.SetInitializer<MvcApplication1.Models.studentContext>(null);

В приведенном выше коде перечислены все классы, над которыми я работаю. При запуске приложения я получаю сообщение об ошибке:

"Во время генерации модели были обнаружены одна или несколько ошибок проверки", а также "Тип сущности не имеет ключа".

Ответ 1

Класс Model должен быть изменен на:

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    [Table("studentdetails")]
    public class student
    {
        [Key]
        public int RollNo { get; set; }

        public string Name { get; set; }

        public string Stream { get; set; }

        public string Div { get; set; }
    }
}

Ответ 2

  • Убедитесь, что общедоступные члены класса ученика определены как свойства w/ {get; set;} (ваши общедоступные переменные - распространенная ошибка).

  • Поместите аннотацию [Key] поверх выбранного вами свойства.

Ответ 3

Это может быть несколько причин. Некоторые из них я нашел здесь, другие, которые я обнаружил сам по себе.

  • Если свойство имеет имя, отличное от Id, вам нужно добавить к нему атрибут [Key].
  • Ключ должен быть свойством, а не полем.
  • Ключ должен быть public
  • Ключ должен быть CLS-совместимым типом, что означает, что беззнаковые типы, такие как uint, ulong и т.д., не допускаются.
  • Эта ошибка также может быть вызвана ошибками конфигурации .

Ответ 4

Я знаю, что этот пост опаздывает, но это решение помогло мне:

    [Key]
    [Column(Order = 0)]
    public int RoleId { get; set; }

добавлено [Столбец (Заказ = 0)] после [Key] может быть добавлено путем увеличения на 1:

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

и т.д...

Ответ 5

В моем случае я получал ошибку при создании "MVC 5 Controller с представлением, используя Entity Framework".

Мне просто нужно было создать проект после создания класса Model и не нужно было использовать аннотацию [Key].

Ответ 6

Использование [key] не работает для меня, но использует свойство id. Я просто добавляю это свойство в свой класс.

public int id {get; set}

Ответ 7

Причина, по которой EF-инфраструктура запрашивает "нет ключа", заключается в том, что для структуры EF необходим первичный ключ в базе данных. Чтобы декларативно сказать EF, какое свойство принадлежит ключу, вы добавляете аннотацию [Key]. Или, самый быстрый способ, добавьте свойство ID. Затем структура EF по умолчанию примет ID как первичный ключ.

Ответ 8

Все правильно, но в моем случае у меня есть два класса, таких как

namespace WebAPI.Model
{
   public class ProductsModel
{ 
        [Table("products")]
        public class Products
        {
            [Key]
            public int slno { get; set; }

            public int productId { get; set; }
            public string ProductName { get; set; }

            public int Price { get; set; }
}
        }
    }

После удаления верхнего класса он отлично работает для меня.