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
'공부 > EFCore' 카테고리의 다른 글
[EFCore] 다수의 Entity Class를 하나의 테이블에 매핑하기 (0) | 2022.09.08 |
---|---|
[EFCore] 상속 관계를 매핑해보자 : Table Per Hierarchy (THP) 만들기 (0) | 2022.09.08 |
[EFCore] Entity와 DB, Table 연동하기 (0) | 2022.09.07 |
[EFCore] Shadow Property와 Backing Field (0) | 2022.09.07 |
[EFCore] 다수의 Navigational Property가 같은 클래스를 참조하는 상황, 어떻게 대처할까 (0) | 2022.09.07 |