programing

엔티티 프레임워크가 "같은 키를 가진 항목이 이미 추가되었습니다"를 슬로우합니다.

sourcejob 2022. 12. 24. 17:33
반응형

엔티티 프레임워크가 "같은 키를 가진 항목이 이미 추가되었습니다"를 슬로우합니다.

이 예외는 다음과 같습니다.

동일한 키를 가진 항목이 이미 추가되었습니다.키: 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

반응형