- 개요
EF-Core에서 사용할 수 있는 Shadow Property와 Backing Field에 대해서 알아보겠습니다.
두 개의 요소에 대해 다음과 같이 정리할 수 있습니다.
- Shadow Property : DB에는 존재하지만, Class에는 존재하지 않도록 설정하는 방식
- Backing Field : private field를 DB에 매핑하고, public getter로 가공하여 사용하는 방식
1) Shadow Property 사용예시
1 - 1) AppDBContext 클래스
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
// Shadow Property
modelBuilder.Entity<Item>().Property<DateTime>("RecoveredDate");
}
Shadow Property는 위와 같이 .Property<자료형>("열이름")의 구성으로 생성할 수 있습니다.
예시에서는 DateTime의 데이터를 RecoveredDate라는 이름으로 Shadow Property를 생성합니다.
1 - 2) DBCommands 클래스
...
public static void CreateTestData(AppDBContext db)
{
...
// Shadow Property Test
db.Entry(items[0]).Property("RecoveredDate").CurrentValue = DateTime.Now;
...
db.SaveChanges();
}
Shadow Property에 Read / Write를 하기 위해서는 .Property("열이름").CurrentValue로 접근합니다.
예시에서는 Items 데이터 테이블의 첫 번째 데이터의 Shadow Property에 값을 작성합니다.
1 - 3) 최종 실행 결과

첫 번째 Item의 Shadow Property가 위와 같이 설정된 것을 확인할 수 있습니다.
2) Backing Field 사용예시
2 - 1) DataModel 클래스
public struct ItemOption
{
public int str;
public int dex;
public int hp;
}
[Table("Item")]
public class Item
{
private string? _jsonData;
public string? JsonData
{
get { return _jsonData; }
}
public void SetOption(ItemOption opt)
{
_jsonData = JsonConvert.SerializeObject(opt);
}
public ItemOption GetOption()
{
return JsonConvert.DeserializeObject<ItemOption>(_jsonData);
}
...
}
Item 엔티티 클래스에 새로운 filed인 _jsonData를 추가하고 ItemOption 구조체의 데이터를 저장합니다.
이때 해당 filed의 데이터를 Read / Write하기 위해서는 public 함수를 사용하여 접근합니다.
예시는 다음과 같이 구성하였습니다.
DB에는 json 형태로 string을 가공하여 저장하고, getter는 저장된 json을 string으로 가공하여 사용합니다.
2 - 2) AppDBContext 클래스
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
// Fluent API 방식으로 누락된 Setter 완성
modelBuilder.Entity<Item>()
.Property(i => i.JsonData)
.HasField("_jsonData");
}
누락된 Setter 프로퍼티를 OnModelCreating 함수에서 정의합니다.
2 - 3) DBCommands 클래스
public static void CreateTestData(AppDBContext db)
{
...
// Test Backing Field
items[0].SetOption(new ItemOption { str = 100, dex = 100, hp = 100 });
...
db.SaveChanges();
}
CreateTestData 함수에서 Backing Field를 통해 첫 번째 아이템에 새로운 ItemOption 데이터를 추가합니다.
2 - 4) 최종 실행 결과

위와 같이 데이터가 추가된 것을 확인할 수 있습니다.
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (5) EF Core' 카테고리의 다른 글
| Backing Field + Relationship (0) | 2025.08.25 |
|---|---|
| Entity Class와 Data Table 연동 (0) | 2025.08.19 |
| Relationship Configuration (0) | 2025.08.18 |
| Configuration (0) | 2025.08.18 |
| Delete (0) | 2025.08.12 |