관리 메뉴

웹개발자의 기지개

[C#] .NET Core - Entity Framework Core 1 본문

ASP.NET/C#

[C#] .NET Core - Entity Framework Core 1

http://portfolio.wonpaper.net 2020. 12. 19. 13:57

Entity Framework 를 활용해보자.

먼저 NuGet 으로 Entity Framework 관련 패키지를 설치해둔다.

아래의 그림과 같이 Employee.cs 와 MyDbContext.cs 클래스 파일을 준비한다.

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
 
namespace EntitiyFramworkCoreExam1.Models
{
    [Table("Employee")]
    public class Employee
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
 
        public DateTime DOB { get; set; }
        public decimal Salary { get; set; }
    }
}
 
cs
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace EntitiyFramworkCoreExam1.Models
{
    public class MyDbContext : DbContext
    {        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Data Source=(local);Initial Catalog=MyDB2;Integrated Security=SSPI");
        }
 
        public DbSet<Employee> Employees { get; set; }
 
        // 여러개의 다른 테이블들을 추가로 지정할 수 있다.
 
    }
}
 
cs

MyDbContext 클래스내에 MyDB2 라는 DB 명으로 DB 연결시키는 관련 항목을 볼수 있다.

 

클래스파일을 준비해뒀으니, 이번에는 관련 DB를 자동생성 시켜주는 DB 마이그레이션 작업을 진행한다.

 

패키지 관리자 콘솔을 열고, 

PM> Add-Migration mig1  

 

그러면 마이그레이션 관련 소스가 생성된다.

 

패키지 관리자 콘솔에서

PM> Update-Database  

 

 

자동으로 관련 DB 와 테이블을 생성시켜준다.

 

일단 Employee 에 데이터를 임의로 넣어서 프로젝트를 실행시켜보고 실제 테이블내에 데이터가 잘 삽입되어 있는지 확인해보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using EntitiyFramworkCoreExam1.Models;
using System;
 
namespace EntitiyFramworkCoreExam1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyDbContext db = new MyDbContext();
 
            Employee emp = new Employee
            {
                Name = "Tom",
                DOB = new DateTime(2020,10,22),
                Salary = 50000
            };
            db.Employees.Add(emp);
 
            Employee emp2 = new Employee
            {
                Name = "Jane",
                DOB = new DateTime(2020115),
                Salary = 30000
            };
            db.Employees.Add(emp2);
 
            // db에저장
            db.SaveChanges();
        }
    }
}
 
cs

 

그렇다면, Employee 테이블에 Address string 을 추후 더 추가한다고 한다면,

Employee 클래스에 Address 속성을 추가해준다.

그런다음, 새로운 마이그레이션을 추가해주고, 다시 Update하여 해당 DB에 적용시켜준다.

 

패키지 관리자 콘솔에서

PM> Add-Migration mig2
Build started...
Build succeeded.
To undo this action, use Remove-Migration.


PM> Update-database mig2
Build started...
Build succeeded.
Applying migration '20201219061832_mig2'.
Done.

 

 

 

 

위의 소스중에 MyDbContext 클래스내에 직접 Db 연결관련해서 하드코딩하지 않고, appsettings.json 파일을 따로 만들어서 그안에 DB 연결자를 넣어 작업할 수도 있다.

 

csharp.tips/tip/article/998-EF-Core-3-Use-appsettings-json-instead-of-hardcoded-connection-string

 

C# Tips - C# Tip Article

EF Core 3 Use appsettings.json instead of hardcoded connection string Question How do I avoid hardcoded connection string in my DbContext class? using Microsoft.EntityFrameworkCore; public class TestDbContext : DbContext { protected override void OnConfigu

csharp.tips

 

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

참고 : sodocumentation.net/ko/entity-framework/topic/7157/entity-framework-%EC%BD%94%EB%93%9C-%EC%B2%AB-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98

참고 : docs.microsoft.com/ko-kr/ef/core/managing-schemas/migrations/?tabs=vs

 

마이그레이션 개요 - EF Core

마이그레이션을 사용한 Entity Framework Core의 데이터베이스 스키마 관리 개요

docs.microsoft.com

참고 : blog.danggun.net/7682

 

[.NET Core 2] EF(Entity Framework) 코어(Core) 코드 퍼스트(Code First)

코드를 먼저 작성하고 이것을 기반으로 DB를 수정하는 것이 코드 퍼스트(Code First)입니다. 코드 퍼스트가 왜 필요하고 어떻게 사용하는지 알아봅시다. [.NET Core 2] EF(Entity Framework) 코어(Core) 코드 퍼

blog.danggun.net

 

Comments