카테고리 없음

EF Core - 설치, DB/Table 생성, insert, select

카멜레온개발자 2023. 12. 16. 14:41

1. Visual Studio 2019에서 콘솔 프로젝트 생성 후 Nuget 설치( Microsoft.EntityFrameworkCore.Tools )를 해보려 했으나 설치 실패

 

찾아보니 다음과 같이 .NET 6/.NET 7/.NET 8중에 하나를 선택해야 한다는데

https://dotnet.microsoft.com/ko-kr/platform/support/policy/dotnet-core

 

https://learn.microsoft.com/ko-kr/dotnet/core/tools/sdk-errors/netsdk1182

 

Visual Studio 2019에서는 .NET 6.0을 생성할 수가 없다.

2. 그래서 귀찮지만 Visual Studio 2022를 설치한 뒤 아까 생성했던 프로젝트를 열어서 다음과 같이 .NET을 추가 설치하기로 함 

 

3. 프로젝트를 .NET 8.0으로 다시 만듦

4. 이제는 nuget 추가가 잘 됨

 

5. DB 공급자가 아래와 같이 제공한다고 하는데, MSSQL이 EF Core 6,7용이 있다는데, 내가 실행할려고 하는 놈은 .NET 8인데 하위호환 되길 바란다. neget 설치 : Microsoft.EntityFrameworkCore.SqlServer

 

6. 그런데, 막상 실행시키니 8.0버전이 있네

 

 

https://www.youtube.com/watch?v=ZyEYL-tKqyU

* Entity Framework

  - ORM(Object Relational Mapping) Framework 중 하나

  - Object : OOP의 Object(클래스의 인스턴스)

  - Relation : 관계형 데이터베이스

  - C# 클래스 - SQL Server 매핑 관계를 만들어서 서로 주고받게 하겠다 => ORM Tool

  - ORM Tool 중의 하나가 Entity Framework

  - .Net Core 에서 쓰는 Entity Framework Core라고 함

  - 다른 ORM Tool 도 많다

 

8. Nuget에서 Microsoft.EntityFrameworkCore.Design 도 설치해줌

 

9. 테이블의 구조를 클래스로 만들어준다

    [Table("Emp")] //테이블명이 클래스 이름과 다를 경우 지정해준다
    public class Employee
    {
        [Key] //primary key - 꼭 지정해야 하는 것은 아니다
        public int Id { get; set; } 
        public string Name { get; set; }
        public DateTime DOB { get; set; }
        public decimal Salary { get; set; }
    }

 

10. 데이터베이스의 구조를 클래스로 만들어준다

    //1. DB 골격을 만들어주는 Base Class : DBContext
    public class MyDbContext : DbContext
    {
        //2. Database가 Employee 테이블을 가지고 있다
        public DbSet<Employee> Employees { get; set; }

        //3. 이 Databse가 어떤 서버를 가르키고 있는지 표시
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("data source=(local);Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDB");
            base.OnConfiguring(optionsBuilder);
        }
    }

 

 

10. 서버를 연결 (보기 -> SQL Server 개체 탐색기)

      - 처음에는 이 메뉴가 안 나오는데,

       - 보기 > 서버탐색기 > 데이터 연결 > 우클릭 후 "연결 추가" > 아래의 창에서 계속 누르면 뭔가 설치하라고 나오는데, 설치하고 나면 

메뉴가 나타난다.

 

 

다음과 같이 추가 된다

11. 도구 > Nuget 패키지 관리자 > 패키지 관리자 콘솔

 

 

* Add-Migration mig1 명령을 실행한다(mig1은 Migration 이름이다)

추가에 성공하면 우측의 폴더와 cs 파일이 생긴다

  - cs 파일은 데이터베이스를 만들고, 테이블을 만들고, 테이블을 수정하는 마이그레이션 과정들을 수행하기 위한, C# 파일을 자동으로 Entity Framework 이 생성하게 된다

 

12. 실제로 실행하기 해서 데이터베이스를 만들고, 테이블을 만들기 위해서는 새로운 명령을 내린다 (Update-Database)

* 명령 실행시 아래와 같은 에러가 나온다면 

* Connection String에 다음을 추가한다

 

* 그 후에 Update-Database 명령을 수행한 다음 새로고침을 하면 테이블이 생성되었음을 확인할 수 있다

 

** Entity Framework을 사용해서 insert, select해본다

13. Insert : 다음을 실행한다

MyDbContext db = new MyDbContext();
//Id는 자동생성이므로 입력하지 않는다
Employee emp = new Employee()
{
    Name = "Tom",
    DOB = new DateTime(1999, 5, 10),
    Salary = 50000
};
db.Employees.Add(emp);

Employee emp2 = new Employee()
{
    Name = "Jack",
    DOB = new DateTime(1999, 5, 10),
    Salary = 50000
};
db.Employees.Add(emp2);
//<--여기까지는 메모리에 저장
//-->다음은 DB에 반영
db.SaveChanges();

 

2개의 데이터가 저장되었다

 

14. Select : 다음을 실행한다

MyDbContext db = new MyDbContext();
var emps = db.Employees.Where(x => x.Id > 1);
foreach(var emp in emps)
{
    Console.WriteLine(emp.Id + "," + emp.Name);
}