Default value

Eunho Bae·2022년 7월 2일
0

초기값 (default value)

초기값을 설정하는 방법

Auto-Property Initializer (C# 6.0)

    public class Item
    {
  		public DateTime CreateDate { get; set; } = new DateTime(2022, 1, 1);
    }

Entity 차원의 초기값을 설정해주는 것이기 때문에 SaveChanges 해주기 전까지 DB에는 적용이 되지 않고 공백으로 남아있다.

Fluent API

           builder.Entity<Item>()
               .Property("CreateDate")
               .HasDefaultValue(new DateTime(2022, 1, 1)); 

SQL Fragment

새로운 값이 추가되는 시점에 DB쪽에서 실행

           builder.Entity<Item>()
               .Property("CreateDate")
               .HasDefaultValueSql("GETDATE()"); 
    public class Item
    {
  		public DateTime CreateDate { get; private set; }
    }

외부에서 임의로 CreateDate의 프로퍼티를 변경하지 못하도록 private set으로 바꿔줘야 DB쪽에서만 GETDATE()를 이용하여 CreateDate 초기값을 세팅하도록 할 수 있다.

Value Generator (EF Core(코드에서) 실행)

일종의 Generator 규칙이다.

DataModel

    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;
        }
    }

AppDbContext

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

만약 Name이 세팅되지 않았으면 PlayerNameGenerator()를 호출하여 default value로 설정하는 코드이다.

profile
개인 공부 정리

0개의 댓글