EF Core - 설치, DB/Table 생성, insert, select
1. Visual Studio 2019에서 콘솔 프로젝트 생성 후 Nuget 설치( Microsoft.EntityFrameworkCore.Tools )를 해보려 했으나 설치 실패
찾아보니 다음과 같이 .NET 6/.NET 7/.NET 8중에 하나를 선택해야 한다는데
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 파일은 데이터베이스를 만들고, 테이블을 만들고, 테이블을 수정하는 마이그레이션 과정들을 수행하기 위한, 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();
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);
}