Entity Framework Core를 사용하여 부분 기본 키의 자동 증가
EF Core fluent API를 사용하여 다음 모델을 선언했습니다.
modelBuilder.Entity<Foo>()
.HasKey(p => new { p.Name, p.Id });
Postgre에서 데이터베이스를 작성할 때 두 필드가 기본 키로 표시됩니다.SQL이지만 ID 필드가 자동 증분으로 표시되지 않습니다.나는 또한 추가하려고 노력했습니다.
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Foo 아래의 ID 필드로 이동합니다. 마이그레이션 코드에 차이가 없습니다.PPK인데 Id AI를 만드는 방법이 있나요?
음, 그 데이터 주석들은 효과가 있을 것입니다, 아마도 포스트그레와 관련이 있을 것입니다.SQL 공급자.
사용 중인 데이터베이스 공급자에 따라 EF 또는 데이터베이스에서 값이 클라이언트 쪽으로 생성될 수 있습니다.값이 데이터베이스에서 생성된 경우 EF는 컨텍스트에 엔티티를 추가할 때 임시 값을 할당할 수 있습니다.그러면 이 임시 값이 다음 기간 동안 데이터베이스 생성 값으로 대체됩니다.
SaveChanges
.
다음 Fluent API 구성을 사용해 볼 수도 있습니다.
modelBuilder.Entity<Foo>()
.Property(f => f.Id)
.ValueGeneratedOnAdd();
그런데 아까 말씀드린 것처럼 DB 제공자와 관련된 부분이라고 생각합니다.DB에 새 행을 추가하고 나중에 값이 생성되었는지 확인합니다.Id
기둥.
우선 Fluent API를 데이터 주석과 병합해서는 안 되므로 다음 중 하나를 사용하는 것이 좋습니다.
키를 올바르게 설정했는지 확인합니다.
modelBuilder.Entity<Foo>()
.HasKey(p => new { p.Name, p.Id });
modelBuilder.Entity<Foo>().Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
또는 데이터 주석을 사용하여 이를 달성할 수도 있습니다.
public class Foo
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key, Column(Order = 0)]
public int Id { get; set; }
[Key, Column(Order = 1)]
public string Name{ get; set; }
}
SQL Server Database를 사용하고 있으며 int 기본 키에 다음 주석을 추가한 후에도 예외가 발생한 경우 이 문제를 발견한 모든 사용자에게
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
SQL을 확인하고 기본 키 옆에 IDENTITY(startValue, increment)가 있는지 확인하십시오.
CREATE TABLE [dbo].[User]
(
[Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY
)
이렇게 하면 새 행이 추가될 때마다 id가 증가하며 시작 값은 1, 증분은 1이 됩니다.
저는 실수로 제 인생의 한 시간을 허비한 SQL에서 그것을 간과했습니다. 그래서 이것이 누군가에게 도움이 되기를 바랍니다!!!
아래와 같은 속성 주석 달기
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
새 모델의 모든 값 생성 속성에 ID 열을 사용하려면 컨텍스트의 OnModelCreating()에 다음을 배치하면 됩니다.
builder.ForNpgsqlUseIdentityColumns();
이렇게 하면 의 모든 키 및 기타 속성을 만들 수 있습니다.ValueGeneratedOnAdd()에는 기본적으로 ID가 있습니다.ForNpgsqlUseIdentity를 사용할 수 있습니다.AlwaysColumns()는 항상 ID를 가져야 하며 UseNpgsqlIdentityColumn() 및 UseNpgsqlIdentity를 사용하여 속성별로 ID를 지정할 수도 있습니다.항상 열().
Postgre의 열 유형을 일련 번호로 지정ID를 생성할 SQL입니다.
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order=1, TypeName="serial")]
public int ID { get; set; }
https://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL
언급URL : https://stackoverflow.com/questions/36155429/auto-increment-on-partial-primary-key-with-entity-framework-core
'source' 카테고리의 다른 글
SecurityMockMvc 구성자를 찾을 수 없습니다. (0) | 2023.06.20 |
---|---|
하위 프로세스를 사용하여 실시간 출력 가져오기 (0) | 2023.06.20 |
유성에서 예제를 실행해야 하는 문제 (0) | 2023.06.20 |
JDBC가 빈 결과 집합을 반환합니다. (0) | 2023.06.20 |
SQL Server에서 기본 키 열 변경 (0) | 2023.06.20 |