[Entity Framework Core] MySql 에서 "requires a primary key to be defined" 에러
.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
마무리
저는 웬만하면 한 테이블이 한 개의 기본키를 설정하기 때문에 이 해결방법이 문제가 되진 않을 것 같습니다.