[EF Core] Property Setter를 호출하는 법
개요
Entity Framework를 사용하면서 특정 property 값에 전처리를 위해 setter 내부에서 특정 동작을 하도록 하였으나 정상적으로 동작하지 않았다.
확인 해보니 EF Core는 내부적으로 backing field를 사용하여 property가 아닌 field로 접근을 할 수 있는 것이다. 엔티티가 생성 된 후 엔티티를 업데이트 하는 경우에만 Property에 접근이 이루어지고, Property가 읽기 접근이거나 업데이트가 없으면 backing field를 계속 사용한다.
해결법
EF Core에서 모델을 빌드할 때 backing field 대신 Property를 사용 할 것이라고 알린다.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<User>(eb => {
eb.HasNoKey();
eb.Property(u => u.Name)
.HasField("_name")
.UsePropertyAccessMode(PropertyAccessMode.Property);
});
}
또한 아래 방법으로 모든 Property에 대해 적용할 수 있다.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UsePropertyAccessMode(PropertyAccessMode.Property)
.Entity<User>(eb => eb.HasNoKey());
}