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
)


в глобальном.асакс.cs



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


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




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


579   11  

11 ответов:

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

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; }
    }
}
  1. убедитесь, что открытые члены класса student определены как свойства Вт/ {get; set;} (твои общественных переменные - распространенная ошибка).

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

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

  • если свойство имеет имя, отличное от Id, вам необходимо добавить

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

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

добавлено [столбец (порядок = 0)] после [ключ] может быть добавлен с шагом 1:

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

etc...

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

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

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

public int id {get; set}

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

все верно, но в моем случае у меня есть два класса, как это

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

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

для меня эта модель была в порядке. У меня было 2 разные версии Entity framework. Одна версия для веб-проекта, а другая для общего проекта, который содержит модели.

Я просто должен был консолидация пакетов nuget.

наслаждайтесь!

объект должен содержать поле, которое будет использоваться как Primary Key, если у вас есть поле с именем Id тогда это будет по умолчанию первичный ключ объекта, на который Entity Framework будет ссылаться.

в противном случае, вы должны добавить [Key] атрибут над этим полем, которое вы хотите использовать в качестве Primary Key, и Вам также нужно добавить пространство имен System.ComponentModel.DataAnnotations:

public class myClass
{
    public int Id { get; set; }
    [Key]
    public string Name { get; set; }
}

https://stackoverflow.com/a/51180941/7003760

вы не должны использовать ключевой атрибут все время. Убедитесь, что файл сопоставления правильно адресован ключу

this.HasKey(t => t.Key);
this.ToTable("PacketHistory");
this.Property(p => p.Key)
            .HasColumnName("PacketHistorySK");

и не забудьте добавить отображение в репозитории OnModelCreating

modelBuilder.Configurations.Add(new PacketHistoryMap());

Comments

    Ничего не найдено.