.Net 6의 고급 Ef Core 및 PostgreSQL

이 기사에서는 .NET 6을 사용하는 PostgreSQL의 고급 Ef Core를 살펴볼 것입니다. .NET 6 WebAPI를 사용하여 PostgreSQL을 설정, 구성 및 활용하는 데 필요한 단계입니다.

YouTube에서 전체 동영상을 볼 수 있습니다.


Github에서 소스 코드를 찾을 수도 있습니다.

https://github.com/mohamadlawand087/Net6-EfCore-Postgres-V2

데이터베이스에서 테이블 이름 변경

modelBuilder.Entity<Driver>(entity =>
{
    entity.HasOne(d => d.Team)
        .WithMany(p => p.Drivers)
        .HasForeignKey(d => d.TeamId)
        .OnDelete(DeleteBehavior.Restrict)
        .HasConstraintName("FK_Driver_Team");

    entity.ToTable("F1Drivers");
});

modelBuilder.Entity<Team>().ToTable("F1Teams");


테이블 설명

modelBuilder.Entity<Team>()
        .ToTable("F1Teams")
        .HasComment("This table is used to store F1 teams information");


열 설명

modelBuilder.Entity<Team>()
        .ToTable("F1Teams")
        .HasComment("This table is used to store F1 teams information")
        .Property(b => b.Name)
        .HasComment("The Name of the team");


속성이 데이터베이스로 마이그레이션되는 것을 무시하는 방법을 살펴보겠습니다.

public class Driver : BaseEntity
{
    public Guid TeamId { get; set; }
    public string Name { get; set; } = "";
    public int RacingNumber { get; set; } 
    public virtual Team Team { get; set; }

    [NotMapped]
    public string NumberAndName { get; set; }
}

public class Team : BaseEntity
{
    public Team()
    {
        Drivers = new HashSet<Driver>();
    }

    public string Name { get; set; } = "";
    public string Year { get; set; } = "";

    [NotMapped]
    public string NameAndYear { get; set; }

    public virtual ICollection<Driver> Drivers { get; set; }
}

// Or with Fluent API
modelBuilder.Entity<Driver>(entity =>
{
    entity.HasOne(d => d.Team)
        .WithMany(p => p.Drivers)
        .HasForeignKey(d => d.TeamId)
        .OnDelete(DeleteBehavior.Restrict)
        .HasConstraintName("FK_Driver_Team");

    entity.ToTable("F1Drivers");
    entity.Ignore(x => x.NumberAndName);
});

modelBuilder.Entity<Team>()
        .ToTable("F1Teams")
        .HasComment("This table is used to store F1 teams information")
        .Ignore(x => x.NameAndYear);


열 이름 업데이트

// Fluent API
modelBuilder.Entity<Team>()
            .Property(b => b.Id)
        .HasColumnName("team_id");

public class Driver : BaseEntity
{
    public Guid TeamId { get; set; }
    public string Name { get; set; } = "";

    [Column("racing_number")]
    public int RacingNumber { get; set; } 
    public virtual Team Team { get; set; }

    [NotMapped]
    public string NumberAndName { get; set; }
}


열 데이터 유형

// Data Annotation
public class Driver : BaseEntity
{
    public Guid TeamId { get; set; }

    [Column(TypeName = "varchar(200)")]
    public string Name { get; set; } = "";

    [Column("racing_number")]
    public int RacingNumber { get; set; } 
    public virtual Team Team { get; set; }

    [NotMapped]
    public string NumberAndName { get; set; }
}

// Fluent API
modelBuilder.Entity<Driver>(entity =>
        {
            entity.HasOne(d => d.Team)
                .WithMany(p => p.Drivers)
                .HasForeignKey(d => d.TeamId)
                .OnDelete(DeleteBehavior.Restrict)
                .HasConstraintName("FK_Driver_Team");

            entity.Property(b => b.Name).HasColumnType("varchar(200)");

            entity.ToTable("F1Drivers");
            entity.Ignore(x => x.NumberAndName);
        });


열 순서

modelBuilder.Entity<Driver>(entity =>
        {
            entity.HasOne(d => d.Team)
                .WithMany(p => p.Drivers)
                .HasForeignKey(d => d.TeamId)
                .OnDelete(DeleteBehavior.Restrict)
                .HasConstraintName("FK_Driver_Team");

            entity.Property(b => b.Name).HasColumnType("varchar(200)");

            entity.ToTable("F1Drivers");
            entity.Ignore(x => x.NumberAndName);

             entity.Property(b => b.Id)
            .HasColumnOrder(0);

            entity.Property(b => b.Name)
            .HasColumnOrder(1);

            entity.Property(b => b.RacingNumber)
            .HasColumnOrder(2);
        });

좋은 웹페이지 즐겨찾기