0

EF Core 2.0 및 Postgres 9.6을 사용 중입니다. 내가 데이터를 삽입 할 때마다 나는 오류를 얻을PostgresException : 23505 : 중복 키 값이 고유 제한 조건 "PK_country"을 위반 함

PostgresException : 23505 : 키 값을 중복 위반 독특한 제약이 AutoInciment 열을

내 모델을 생성 나던 EF처럼 보인다 추적함으로써 "PK_country"

public partial class Country 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int CountryId { get; set; } 
     [Display(Name="Country Name")] 
     public string CountryName { get; set; } 
    } 

내 컨트롤러

,363,210
if (ModelState.IsValid) 
      { 
       _context.Add(country); 
       await _context.SaveChangesAsync(); 
       return RedirectToAction(nameof(Index)); 
      } 

예외

> PostgresException: 23505: duplicate key value violates unique 
> constraint "PK_country" 
> 
>  Npgsql.NpgsqlConnector+<DoReadMessage>d__148.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
>  System.Runtime.CompilerServices.ValueTaskAwaiter.GetResult() 
>  Npgsql.NpgsqlConnector+<ReadMessage>d__147.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  Npgsql.NpgsqlConnector+<ReadMessage>d__147.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
>  System.Runtime.CompilerServices.ValueTaskAwaiter.GetResult() 
>  Npgsql.NpgsqlDataReader+<NextResult>d__32.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  Npgsql.NpgsqlDataReader+<<NextResultAsync>b__31_0>d.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  Npgsql.NpgsqlCommand+<Execute>d__71.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
>  System.Runtime.CompilerServices.ValueTaskAwaiter.GetResult() 
>  Npgsql.NpgsqlCommand+<ExecuteDbDataReader>d__92.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
>  System.Runtime.CompilerServices.ValueTaskAwaiter.GetResult() 
>  Npgsql.NpgsqlCommand+<>c__DisplayClass90_0+<<ExecuteDbDataReaderAsync>b__0>d.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
>  Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand+<ExecuteAsync>d__17.MoveNext() 
>  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
>  System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task) 
>  System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
>  Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch+<ExecuteAsync>d__32.MoveNext() 

무슨 문제가 될 수 있을까?

+0

게시물과 태그를 업데이트하십시오. ASP.NET CORE2는 관련이 없으며, EF ** Core **, 버전 및 사용 된 Postgres 공급자입니다. –

+0

좋아, 나는 게시물을 udated – Navigator

+0

고마워. [직렬 (자동 증가) 열] (http://www.npgsql.org/efcore/value-generation.html#serial-autoincrement-columns) 및 [1.0.x에서 업그레이드] (http : /www.npgsql.org/efcore/migration/1.1.html#upgrading-from-10x)이 해당 시나리오에 적용됩니다. –

답변

1

해결 방법은입니다. 문제는 SQL 데이터베이스에서 스크립트로 데이터베이스를 시드하는 것이 었습니다.

context.Database.ExecuteSqlCommand(File.ReadAllText(baseDir + "\\data.sql")); 

삽입은

ALTER TABLE country DISABLE TRIGGER ALL; 
INSERT INTO country ....... 

그래서 순서 현재 값이 업데이트되지 않았습니다 포함되어 있습니다. 현재 값은 1로 남았습니다. 자동 기록은 1이됩니다. PostgresException : 23505 : 중복 키 값이 고유 제한 조건 "PK_country"을 위반합니다.

해상도

ALTER 표 국가 후 모든 트리거를 활성화; add SELECT pg_catalog.setval (pg_get_serial_sequence ('country', 'country_id'), MAX (country_id)) FROM 국가입니다.

이제 애플리케이션이 원활하게 실행됩니다.

희망 도움말 다른 사용자.