공부/EFCore

[EFCore] 초기값 설정하기

돌멩이수프 2022. 9. 9. 17:41
728x90

 

초기값 설정에 크게 2가지 차이점이 있다. Entity class 자체의 초기값과 DB Table 차원의 초기값이다.

 

1️⃣ Auto-Property Initializer

public DateTime CreateDate { get; set; } = new DateTime(2020, 1, 1);

 

이는 Entity 차원의 초기값으로 SaveChanges로 DB에 적용하지 않는 이상 DB에는 적용되지 않는다.

 

2️⃣ Fluent API

builder.Entity<Item>()
    .Property("CreateDate")
    .HasDefaultValue(DateTime.Now);

 

DB Table DEFAULT를 적용하는 방식이다. DB에 적용된다.

 

3️⃣ SQL Froagment

builder.Entity<Item>()
    .Property("CreateDate")
    .HasDefaultValueSql("GETDATE()");

 

새로운 값이 추가되는 시점에 DB 쪽에서 실행된다. HasDefaultValueSql을 사용한다.

 

4️⃣ Value Generator

예시는 Player의 이름을 자동으로 생성하는 상황이다.

 

public class PlayerNameGenerator : ValueGenerator<string>
{
    public override bool GeneratesTemporaryValues => false;

    public override string Next(EntityEntry entry)
    {
        string name = $"Player_{DateTime.Now.ToString("yyyyMMdd")}";
        return name;
    }
}

 

이름을 생성해주는 함수를 만든다.

 

builder.Entity<Player>()
    .Property(p => p.Name)
    .HasValueGenerator((p, e) => new PlayerNameGenerator());

 

EF Core에서 실행된다. 일종의 Generator 규칙이다.

728x90