DB연동

Eunho Bae·2022년 6월 30일
0

환경설정

콘솔앱(.net core) 새 프로젝트를 만든 후 Microsoft.EntityFrameworkCore.SqlServer를 설치한다.

DB연동

Databases 우클릭 후 MyDB라는 이름의 새 데이터베이스를 만들어 준 후 속성의 Connection string에 있는 문자열을 복사해서 코드의 public const string ConnectionString 변수에 붙여넣는다.

Data Source : 어떤 데이터베이스에 연결할 것인지 정해준다.
Initial Catalog : 데이터베이스 이름

그 외 몇가지 정보들이 필요하다.

코드

AppDbContext

    class AppDbContext : DbContext
    {
        // EF Core 작동 스텝
        // 1) DbContext 만들때 DbSet<T>을 찾는다.
        // 2) 모델링 class 분석 후 컬럼을 찾는다. 
        // 3) 모델링 class에서 참조하는 다른 class가 있으면, 그것도 분석
        // 4) OnModelCreating 함수 호출 (추가 설정하고 싶으면 override)
        // 5) 데이터베이스 전체 모델링 구조를 내부 메모리에 들고 있어서 빠르게 처리가능
        // Item이라는 DB 테이블이 있는데, 세부적인 칼럼/키 정보는 Item 클래스를 참고하라
        public DbSet<Item> items { get; set; } // 데이터 긁어오는 용

        // 어떤 DB를 어떻게 연결해라라는 것을 string에 (각종 설정, Authorization 등)
        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);
        }
    }

DataModel

 // 클래스 이름 = 테이블 이름 = Item
 	[Table("Item")] // 테이블 이름 여기서 지정 가능. 지정 안하면 AppDbContext에서 items 변수 이름으로 생성됨
    public class Item
    {
        public int ItemId { get; set; }
        public int TemplateId { get; set; } // 101 = 집행검
        public DateTime CreateDate { get; set; }


        // 다른 클래스 참조 -> 외부키(foreign key/navigational property)
        // OwnerId와 Owner와 한세트
        public int OwnerId { get; set; } // 이 부분 주석처리하고 실행하면 OwnerPlayerId로 DB에 자동 생성
        public Player Owner { get; set; } 
    }

    public class Player
    {
        // 클래스이름Id : 관례
        public int PlayerId { get; set; } // primary key
        public string Name { get; set; }
    }

Program

 class Program 
    {
        // 초기화 시간이 걸림
        static void InitializeDB(bool forceReset = false)
        {
            using (AppDbContext db = new AppDbContext())
            {
                if(!forceReset && (db.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()) // DB가 만들어져 있는가
                    return;

                db.Database.EnsureDeleted(); // 싹 다 밀어버린 후
                db.Database.EnsureCreated(); // 새로운 마음으로

                Console.WriteLine("DB Initialized!");
            }
        }

        static void Main(string[] args)
        {
            InitializeDB(forceReset: true);
        }
    }

실행

코드를 작성하고 실행을 하게되면 사진과 같이 코드 내용대로 DB column과 key가 생성된 것을 확인할 수 있다.

profile
개인 공부 정리

0개의 댓글