일대다 관계 설정하기
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로 설정할 수 있습니다.
- 자식을 변경하지 않고 그대로 유지합니다.