프로그래밍/DB, SQL, EF

[Entity Framework Core] MySql 에서 "requires a primary key to be defined" 에러

당근천국 2017. 6. 14. 15:30

.NET Core에서 'Entity Framework(엔트리 프레임워크)'를 사용하려면 코어용 엔트리 프레임워크가 필요합니다.

 

.NET Core + MySql + Entity Framework

이렇게 사용하려면 'MySQL.Data.EntityFrameworkCore'를 참조해야 합니다.

(참고 : nuget - MySql.Data.EntityFrameworkCore (2017-06-14기준 최신 버전 7.0.7-m61 ) )

 

그런데 모델을 생성하고 테이블을 업데이트하니 이런에러가 납니다.

 

"The entity type '[Table Name]' requires a primary key to be defined"

 

원인

내용만 보면 기본키가 지정되지 않아서 나는 것 같습니다.

하지만 이 테이블에는 기본키가 지정되어 있습니다 ㅎㅎㅎ

 

해결하기

모델을 만들 때 필터에 키를 명시해주면 이 문제는 일단 해결됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
public class TestTable
{
    public TestTable()
    {
    }
 
    [Key]
    public int nIndex { get; set; }
 
    public int testInt { get; set; }
    public string testVarchar { get; set; }
}
cs

 

 

이런 식으로 말이죠.

 

기본키가 없어도 없어도 키로 지정하면 저 에러가 사라집니다.

문제는 키로 필터 된 값은 중복돼있으면 문제 생기는 거로 알고 있었는데....

테스트 해보니 별문제 없습니다 ㅡ.-;;;

 

'Key'필터는 키인 것만 명시하는 용도 인듯합니다.

(참고 : MSDN - KeyAttribute 클래스)

 

다른 방법

아래 방법들은 제가 직업 해보지 않은 방법입니다.

 

stackoverflow - .Net Core Entity Framework MySQL - string fields store 255 symbols only

stackoverflow - The entity type 'IdentityUserLogin<string>' requires a primary key to be defined

stackoverflow - EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType

 

 

마무리

저는 웬만하면 한 테이블이 한 개의 기본키를 설정하기 때문에 이 해결방법이 문제가 되진 않을 것 같습니다.