Relationship 기초

Eunho Bae·2022년 6월 30일
0

DataModel

 [Table("Item")]
    public class Item
    {
        public int ItemId { get; set; }
        public int TemplateId { get; set; }
        public DateTime CreateDate { get; set; }

        [ForeignKey("OwnerId")]
        //public int OwnerId { get; set; } // 실질적으로 DB에 저장되는 프로퍼티
        public Player Owner { get; set; } // 코드 상에서 접근하는 프로퍼티. DB에 저장x
    }

    public class Player
    {
        public int PlayerId { get; set; } 
        public string Name { get; set; }

        // List나 HashMap 등의 조상
        // 속도가 List보다 더 빠름
        public ICollection<Item> Items { get; set; }
    }

AppDbContext

public class AppDbContext : DbContext
    {
        public DbSet<Item> Items { get; set; } 
        public DbSet<Player> Players { get; set; } 

        public const string ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=MyDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; // 외부 파일에 넣어두는게 안전

        protected override void OnConfiguring(DbContextOptionsBuilder options) 
        {
            options.UseSqlServer(ConnectionString);
        }
    }

DbCommands

 public static void ShowItems()
        {
            Console.WriteLine("플레이어 이름 입력 : ");
            string name = Console.ReadLine();

            using (var db = new AppDbContext())
            {
                foreach(Player player in db.Players.AsNoTracking().Where(p => p.Name == name).Include(p => p.Items))
                {
                    foreach(Item item in player.Items)
                    {
                        Console.WriteLine($"{item.TemplateId}");
                    }
                }

            }
        }
profile
개인 공부 정리

0개의 댓글