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);
в приведенном выше коде перечислены все классы, над которыми я работаю. При запуске моего приложения я получаю сообщение об ошибке:
" во время моделирования была обнаружена одна или несколько ошибок проверки генерация "вместе с"типом сущности не имеет определенного ключа".
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; } } }
убедитесь, что открытые члены класса student определены как свойства Вт/
{get; set;}(твои общественных переменные - распространенная ошибка).место
[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; } }
вы не должны использовать ключевой атрибут все время. Убедитесь, что файл сопоставления правильно адресован ключу
this.HasKey(t => t.Key); this.ToTable("PacketHistory"); this.Property(p => p.Key) .HasColumnName("PacketHistorySK");и не забудьте добавить отображение в репозитории OnModelCreating
modelBuilder.Configurations.Add(new PacketHistoryMap());
Comments