You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

일대다 관계 설정하기

Casecade Delete를 이해하기에 앞서, Entity를 일대다로 연관관계를 맺는방법을 알아야합니다.

순수하게 Db설계에서는 단순하게 자식테이블의 특정 id가 부모의 외래키가 설정된 케이스입니다.


어노테이션으로 설정Fluent API사용하여 설정
[Table("tokenhistory")]
public class TokenHistory
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int TokenHistoryId { get; set; }
          
    [ForeignKey("UserForeignKey")]
    public User User { get; set; }


}

[Table("user")]
public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public List<TokenHistory> TokenHistorys { get; set; }
}
public class AccountContent : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<TokenHistory> TokenHistories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //관계설정
        modelBuilder.Entity<TokenHistory>()                
            .HasOne(t => t.User)
            .WithMany(b => b.TokenHistorys);
    }
}

위 코드를 살펴보면, ORM이  DDL까지 할수 있습니다. 


  • DDL(Data Definitison Language)의 테이블 객체의 생성(Create),변경(Alert),삭제(Drop)을 포함하여 Index설정등을 할수 있음
  • DML(Data Manipulation Language) : 스키마객체의 데이터를 Insert/Update/Select등을 할수 있는 명령어(표준화되어있어서 거의 공통)
  • DCL(Data Control Language) : Commit,RollBack,SavePoint등을 할수 있는 명령어(DB종속적인 경우가 많음)



하위항목 삭제

일대다(부모 vs 자식) 관계에서  


  • 자식/종속을 삭제할 수 있습니다.
  • 자식의 외래 키 값을 null로 설정할 수 있습니다.
  • 자식을 변경하지 않고 그대로 유지합니다.
  • No labels