[C#] 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);

위의 코드는 내가 작업중 인 모든 클래스를 나열합니다. 내 응용 프로그램을 실행하면 오류가 발생합니다.

“엔터티 유형에 키가 정의되어 있지 않습니다”와 함께 “모델 생성 중 하나 이상의 유효성 검사 오류가 발견되었습니다”.



답변

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


답변

  1. 학생 클래스의 확인 공용 멤버로 정의되어 있는지 확인 속성 W / {get; set;}(당신은 공개되어 변수 – 일반적인 실수를).

  2. 장소 [Key]선택한 재산의 상단에 주석을.


답변

이 문제가 발생할 수있는 몇 가지 이유가 있습니다. 내가 여기서 찾은 것들 중 일부는 내가 스스로 발견했다.

  • 속성 이름이 이외의 다른 속성 인 경우 속성 Id을 추가해야 [Key]합니다.
  • 키는 필드가 아닌 속성이어야합니다.
  • 열쇠는 public
  • 핵심 요구 사항은 서명되지 않은 유형이 같은 의미하는 CLS 규격 유형으로 uint, ulong허용되지 않습니다 등.
  • 이 오류는 구성 실수 로 인해 발생할 수도 있습니다 .

답변

이 게시물이 늦었지만이 솔루션이 도움이되었다는 것을 알고 있습니다.

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

[Key] 이후에 [Column (Order = 0)]을 1 씩 추가하여 추가 할 수 있음

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

기타…


답변

필자의 경우 “Entity Framework를 사용하여보기가있는 MVC 5 컨트롤러”를 만들 때 오류가 발생했습니다.

Model 클래스를 만든 후 프로젝트를 빌드해야했고 [Key] 주석을 사용할 필요가 없었습니다.


답변

[key]를 사용하면 효과가 없었지만 id 속성을 사용하면 효과가 있습니다. 이 클래스를 클래스에 추가하면됩니다.

public int id {get; set;}


답변

객체는로 사용되는 필드를 포함해야합니다. 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