오류:entity 유형 기본 키가 필요합

을 묻는 질문에 이 스레드 바인딩 listbox 다 에 의해 그 능력을 지속적 데이터입니다. 구조는 대개는 제외하고는 동일한 설치 엔티티 프레임워크 핵심,만든DbContext클래스를 길게 기록합니다. 추가 버튼을 저장할 데이터 있음을 의미합니다. 가 발생하지 않은 컴파일러하지만 때 나는 저장을 시도한 데이터를 데이터베이스에서 이를 실행 시간은 예외:

Message=entity 유형'Fruit'필요한 기본 키로 정의할 수 있다. 전체적인 예외 전체에서는 아래 나열된 시스템입니다.InvalidOperationException 처리되지 않았 외=-2146233079 Message=entity 유형'Fruit'필요한 기본 키로 정의할 수 있다. Source=Microsoft.EntityFrameworkCore StackTrace: Microsoft 에서 사용할 수 있습니다.EntityFrameworkCore.내부입니다.ModelValidator.ShowError(문자열은 메시지) Microsoft 에서 사용할 수 있습니다.EntityFrameworkCore.내부입니다.ModelValidator.EnsureNonNullPrimaryKeys(IModel 모델) Microsoft 에서 사용할 수 있습니다.EntityFrameworkCore.내부입니다.ModelValidator.유효성 검사(IModel 모델) Microsoft 에서 사용할 수 있습니다.EntityFrameworkCore.내부입니다.RelationalModelValidator.유효성 검사(IModel 모델) Microsoft 에서 사용할 수 있습니다.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext 컨텍스트,IConventionSetBuilder conventionSetBuilder,IModelValidator 검사기) 에 Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.<>cDisplayClass14_0.

해결책

이 예외 메시지지 않는't 평균이 필요할 수 있도록 기본 키에서 정의하데이터베이스,그 의미가 필요할 수 있도록 기본 키에서 정의클래스.

비록 당신이've 도 그렇게 하려면 다음과 같이 합니다.

개인 Guid 그리고 우; [Key] 공 Guid ID { 얻을{return 그리고 우;} }

이 효과가 없으로,엔티티 프레임 워크를 무시 읽기 전용 속성이 있습니다. 그것은 있을 때는 그것을 검색녹화 데이터베이스에서,그것은 구성개체화의 속성을 세팅에 대한 각 매핑을 제공합니다. 는's 결코 작동하는 것에 대한 읽기 전용 속성이 있습니다.

당신이 필요로 엔티티 프레임워크를 설정할 수 있는 값의ID. 이 뜻의 속성이 있어야 setter.

해설 (6)

여기에 왔는 유사한 오류:

시스템입니다.InvalidOperationException:'entity 유형'클래스 라이브러리 또'필요한 기본 키로 정의할 수 있다.'

후 읽기에 대답하여 hvd,는 것을 깨달았을 잊을 키 속'공'. 니다.

namespace MyApp.Models.Schedule
{
    public class MyType
    {
        [Key]
        int Id { get; set; }

        // ...

해야 합니다.

namespace MyApp.Models.Schedule
{
    public class MyType
    {
        [Key]
        public int Id { get; set; }  // must be public!

        // ...
해설 (1)

귀하의 Id 속성을 요구하였습니다. 그러나 세터 수 있습니다. 을[Key]특성이 필요하지 않는 경우 호텔 이름"Id"그대로 그것을 찾을 수 있을 통해 이름 지정 규칙에 보이는 곳에 대한 열쇠와 이름"Id".

public Guid Id { get; }              // Will not work
public Guid Id { get; set; }         // Will work
public Guid Id { get; private set; } // Will also work
해설 (0)

내가 찾는 조금 다른 원인 오류가 있습니다. 는 것 같 SQLite 을 사용하려는 정확한 주요 키 클래스의 속성 이름입니다. 그래서...

잘못된 PK 이름

public class Client
{
  public int SomeFieldName { get; set; }  // It is the ID
  ...
}

올바른 PK 이름

public class Client
{
  public int Id { get; set; }  // It is the ID
  ...
}

public class Client
{
  public int ClientId { get; set; }  // It is the ID
  ...
}

그것은 아직도 가망을 사용하여 잘못된 PK 이름이지만 우리가 사용하는[특성을 좋아

public class Client
{
   [Key]
   public int SomeFieldName { get; set; }  // It is the ID
   ...
}
해설 (0)

entity 유형'DisplayFormatAttribute'이 필요할 수 있도록 기본 키 정의됩니다.

내 경우에는 제가 생각한 문제는 내가 사용하는 속성을 다음과 같이:

public string LastName { get; set; }  //OK
public string Address { get; set; }   //OK 
public string State { get; set; }     //OK
public int? Zip { get; set; }         //OK
public EmailAddressAttribute Email { get; set; } // NOT OK
public PhoneAttribute PhoneNumber { get; set; }  // NOT OK

지 확신이 있을 경우는 더 나은 방법으로 해결하는 그러나 나는 이메일과 PhoneNumber 특성하는 문자열을 사용합니다. 문제를 해결합니다.

해설 (0)

아무도 답했을 때까지 제거 HasNoKey()메소드에서 entity. 하는 것을 잊지 말라 이를 제거에서 데이터의 컨텍스트 또는[특성을 해결하지 않습니다.

해설 (0)