[EFCore] Shadow Property와 Backing Field

2022. 9. 7. 16:39·공부/EFCore
728x90

 

✅ Shadow Property

class에는 있지만 DB에는 데이터가 없는 경우, [NotMapped] 혹은 .Ignore()로 해결한다. 반대로 DB에는 데이터가 있지만 class에는 없는 경우를 Shadow Property라고 한다.

Shadow Property를 생성할 때는 .Property<프로퍼티형식>("프로퍼티이름") 으로 한다.

접근할때는 .Property("프로퍼티이름").CurrentValue로 한다.

 

망가진 아이템을 고친 날짜를 Shadow Property로 만들고 싶다고 하면, 우선 Data 생성란에 RecoveredDate를 추가해준다.

db.Entry(items[0]).Property("RecoveredDate").CurrentValue = DateTime.Now;

 

AppDbContext에도 내용을 추가해준다.

builder.Entity<Item>().Property<DateTime>("RecoveredDate");

 

성공적으로 날짜가 생겼다. 밑에 있는 데이터는 생성하지 않은 상태여서 요상하다.

 

 

✅ Backing Field

private field를 DB에 맵핑하고 public getter로 가공해서 사용하고자 하는 상황을 Backing Field라고 한다.

ItemOption을 새로 생성해주는 상황이라 해보자.

 

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 option)
    {
        _jsonData = JsonConvert.SerializeObject(option);
    }

    public ItemOption GetOption()
    {
        return JsonConvert.DeserializeObject<ItemOption>(_jsonData);
    }
    
	// ... //
}

 

AppDbContext에도 내용을 추가한다.

 

builder.Entity<Item>()
	.Property(i => i.JsonData)
	.HasField("_jsonData");

 

데이터 생성란에도 내용을 추가한다.

 

items[0].SetOption(new ItemOption() { dex = 1, hp = 2, str = 3 });

 

 

정상적으로 데이터가 추가됐다. private로 생성된 데이터를 public get, set으로 뽑아와서 사용할 수 있다. 굳.

728x90

'공부 > EFCore' 카테고리의 다른 글

[EFCore] 상속 관계를 매핑해보자 : Table Per Hierarchy (THP) 만들기  (0) 2022.09.08
[EFCore] Entity와 DB, Table 연동하기  (0) 2022.09.07
[EFCore] 다수의 Navigational Property가 같은 클래스를 참조하는 상황, 어떻게 대처할까  (0) 2022.09.07
[EFCore] Convention을 알아보자  (0) 2022.09.06
[EFCore] 데이터를 임시로 삭제해보자 : Soft Delete (HasQueryFilter/IgnoreQueryFilter)  (0) 2022.09.06
'공부/EFCore' 카테고리의 다른 글
  • [EFCore] 상속 관계를 매핑해보자 : Table Per Hierarchy (THP) 만들기
  • [EFCore] Entity와 DB, Table 연동하기
  • [EFCore] 다수의 Navigational Property가 같은 클래스를 참조하는 상황, 어떻게 대처할까
  • [EFCore] Convention을 알아보자
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (238)
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (7)
        • Unity (43)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
      • 자기 관리 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩
    tcp
    C#
    HTML
    백준
    디자인패턴
    네트워크
    게임서버
    EFCore
    coding
    EntityFramework
    자바
    Entityfamework
    라즈베리파이
    C언어
    unity
    C
    java
    유니티
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[EFCore] Shadow Property와 Backing Field
상단으로

티스토리툴바