엔티티 프레임워크가 "같은 키를 가진 항목이 이미 추가되었습니다"를 슬로우합니다.
이 예외는 다음과 같습니다.
동일한 키를 가진 항목이 이미 추가되었습니다.키: p2072
이때가 바로SaveChanges에 엔티티를 추가한 후에 호출됩니다.DbContext.
이상한 것은, 「Key:p2072」라고 쓰여 있습니다만, 제 엔티티의 키와 일치하지 않습니다.
프라이머리 키는 다음과 같이 설정됩니다.
modelBuilder.Entity<RequestEntity>().HasKey(e => new { e.Nif, e.Especialidad, e.Cuerpo });
여기서:
- 니프는
string - 특수는
int - 쿠에르포는
Enum
엔티티의 완전한 정의를 확인할 수 있습니다.다음과 같습니다.
public class RequestEntity
{
public string Nif { get; set; }
public Provincias Provincias { get; set; }
public Cuerpo Cuerpo { get; set; }
public int Especialidad { get; set; }
public Estado Estado { get; set; }
public Idiomas Idiomas { get; set; }
public int Orden { get; set; }
}
Provicias, Cuerpo, Idiomas, Estado는 Enums입니다.다른 엔티티와의 관계는 없으며 원시 유형만 존재합니다.
추가할 엔티티가 +23,000개 있고 중복되는 엔티티가 없는 것 같아 디버깅에 어려움을 겪고 있습니다.
게다가 표시되고 있는 키(p2072)는 의미가 없습니다.키의 문자열은 Nif뿐이지만 일치하는 Nif는 없습니다.
편집
스택 트레이스를 다음에 나타냅니다.
를 클릭합니다.스로우 헬퍼슬로우 추가 중복WithKeyArgument(키 인수 포함)시스템에서 예외(오브젝트 키).컬렉션포괄적인.사전
2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at System.Collections.Generic.Dictionary2. 추가(TKey 키, TValue 값)
마이크로소프트에서.EntityFrameworkCoreUpdate.ReaderModificationCommandBatch.Microsoft의 CreateStoreCommand().EntityFrameworkCoreUpdate.ReaderModificationCommandBatch.실행(IRLational Connection)을 참조하십시오.EntityFrameworkCoreUpdate.Internal.MySqlBatchExecutor.실행(IENumerable1 commandBatches, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList1 엔트리를 참조해 주세요.EntityFrameworkCoreChange Tracking(체인지 트래킹)내부의.스테이트 매니저변경 내용 저장()IReadOnlyList'1 엔트리To Save)를 참조하십시오.EntityFrameworkCoreChange Tracking(체인지 트래킹)내부의.스테이트 매니저Save Changes ( Boolean accept All Changes On Success ) 。EntityFrameworkCore[ DbContext 。Save Changes ( Boolean accept All Changes On Success ) 。EntityFrameworkCore[ DbContext 。Save Changes() at Plugin.클림, 임포터수입업자Save New Results (Import Results 결과)
편집 2
조금 전에SaveChanges다음과 같이 말하고 있습니다.
var duplicates = requestEntities.GroupBy(e=>new{e.Nif, e.Especialidad, e.Cuerpo}).Select(x=>new{x.Key, Count = x.Count()})
.Where(x => x.Count > 1)
.ToList();
재밌는 건duplicates는 아무것도 없습니다(0 요소).무슨 일이야?
(질문 작성자를 대신하여 게시).
사용하고 있는 Pomelo EF MySQL 프로바이더의 버그입니다!최신 버전으로 업데이트하면 문제가 해결됩니다.
언급URL : https://stackoverflow.com/questions/48355928/entity-framework-throws-an-item-with-the-same-key-has-already-been-added
'programing' 카테고리의 다른 글
| 클론 방식을 올바르게 재정의하려면 어떻게 해야 합니다. (0) | 2022.12.24 |
|---|---|
| str==의 차이점은 무엇입니까?C의 특수 및 str[0]=='\0'은 무엇입니까? (0) | 2022.12.24 |
| MySQL SELECT가 최근 며칠 동안입니까? (0) | 2022.12.13 |
| XAMPP에 비해 MariaDB Docker 컨테이너에 SQL 쿼리 삽입 속도가 매우 느립니다. (0) | 2022.12.13 |
| Vuex - rawModule이 정의되지 않음 단일 모듈에서 여러 모듈로 이동 (0) | 2022.12.13 |