Backing field + Relationship

Eunho Bae·2022년 7월 1일
0

주제

backing field란 private field를 DB에 매핑하는 것을 말한다.
추가로 Navigation property에서도 사용 가능하다

DataModel

 public class ItemReview
    {
        public int ItemReviewId { get; set; }
        public int Score { get; set; }
    }

    public class Item
    {
        // 다른 클래스 참조하는 외래키 (navigational property)
        public IEnumerable<ItemReview> Reviews { get { return _reviews.ToList(); } } // set은 불가능
        private readonly List<ItemReview> _reviews = new List<ItemReview>(); // set불가

        public double? AverageScore { get; set; }

        public void AddReview(ItemReview review) // set할때 반드시 AverageScore도 갱신되도록 
        {
            _reviews.Add(review);
            AverageScore = _reviews.Average(r => r.Score);
        }

        public void RemoveReview(ItemReview review)
        {
            _reviews.Remove(review);
            AverageScore = _reviews.Any() ? _reviews.Average(r => r.Score) : (double?)null; 
            // Any() : 하나라도 있으면 true
        }

AppDbContext

           builder.Entity<Item>()
               .Metadata
               .FindNavigation("Reviews")
               .SetPropertyAccessMode(PropertyAccessMode.Field);
profile
개인 공부 정리

0개의 댓글