Entity Framework Core를 사용한 부분 기본 키의 자동 증가

asp.net c# entity-framework entity-framework-core postgresql

문제

EF Core Fluent API를 사용하여 다음 모델을 선언했습니다.

modelBuilder.Entity<Foo>()
    .HasKey(p => new { p.Name, p.Id });

PostgreSQL에서 데이터베이스를 만들었지 만 Id 필드가 자동 증가로 표시되어 있지 않으면 두 필드 모두 기본 키로 표시됩니다. 나는 또한 추가하려고 시도했다.

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Foo 아래의 Id 필드로 이동 코드를 변경하지 않아도됩니다. ID AI를 PPK 일지라도 만들 수있는 방법이 있습니까?

수락 된 답변

그 데이터 주석은 트릭을 수행해야합니다. 아마도 PostgreSQL 공급자와 관련이 있습니다.

EF 핵심 문서에서 :

사용중인 데이터베이스 공급자에 따라 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; }
}


Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow