관리 메뉴

개발자의 코드 노트

ASP.NET Core 데이터베이스 사용 본문

프로그래밍/NET Framework

ASP.NET Core 데이터베이스 사용

IODES 2018. 5. 22. 13:39

ASP.NET Core Entity Framework MySQL 연동을 진행하셨다는 가정 하에 이번 글에서는

EF Core를 통해 DB를 사용하는 예제와 Code First 방법론에 대한 내용을 가볍게 다루도록 하겠습니다.


Code First 방법론

기존처럼 데이터베이스 모델을 먼저 설계하고 코드를 작성하는것이 아닌 C# 클래스 모델을 먼저

작성하고 프로그램을 실행하면 자동으로 모델에 맞춰 데이터베이스가 생성되는 접근 방법입니다.


1. 테이블 설계

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Table("accounts")]
public class Account
{
    [Column("id")]
    public int Id { get; set; }
 
    [Required]
    [Column("email", TypeName = "varchar(250)")]
    public string Email { get; set; }
    
    [Required]
    [Column("password", TypeName = "varchar(128)")]
    public string Password { get; set; }
 
    [Required]
    [Column("nickname", TypeName = "varchar(40)")]
    public string Nickname { get; set; }
    
    [NotMapped]
    public IService Services { get; set; }
}
cs


일반적으로 테이블 모델의 설계는 위와 같이 진행하게됩니다.

기본적으로 모델은 int형의 Id값을 가지고 있으며 이 값은 객체를 추적하기 위해 사용됩니다.

데이터베이스에는 키값으로 매핑되며 이름 규칙은 Id 또는 [ClassName]Id 등을 찾아 자동으로 적용됩니다.


나머지는 아무 프로퍼티를 붙이지 않으면 테이블 이름은 클래스명으로, 컬럼이름은 속성명으로 만들어집니다.

만약 사용자가 직접 테이블 구조를 정의하고 싶다면 몇가지 어트리뷰트를 달아줄 필요가 있습니다.


[TableAttribute]

테이블 이름을 정의할 수 있습니다.


[ColumnAttribute]

컬럼 이름과 타입을 정의할 수 있습니다.


[RequiredAttribute]

해당 컬럼을 NOT NULL로 설정합니다.


[NotMapperAttribute]

해당 속성을 매핑에서 제외합니다.


이외에도 더 많은 어트리뷰트 정보는 여기에서 확인하실 수 있습니다.


2. 테이블 초기화

원래 Entity Framework 6 버전까지는 별다른 설정 없이도 모델을 넣으면 자동으로 테이블이 생성되었습니다.

하지만 Core부터는 방식이 바뀌어서 이제는 SaveChangesAsync 함수가 테이블을 초기화하지 않게되었습니다.


패키지 관리자 콘솔에서 "dotnet core ef" 명령어를 통해 초기화하는게 일반적이지만

다음과 같은 방법으로 Startup의 Configure에 코드를 추가해서 시작시 초기화가 가능합니다.


1
2
3
4
5
6
7
8
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
    {
        var context = serviceScope.ServiceProvider.GetRequiredService<AccountContext>();
        context.Database.EnsureCreated();
    }
}
cs


EnsureCreated 함수는 테이블이 초기화되지 않은 경우에만 불리게됩니다.


3. 테이블 제어

1
2
3
4
5
6
7
8
_context.Account.Add(new Account
{
    Email = "iodesme@gmail.com",
    Nickname = "Lyrical",
    Password = "12345"
});
 
await _context.SaveChangesAsync();
cs


위와같이 테이블에 데이터를 넣을 수 있으며 변경 사항은 서버에 반영됩니다.

삭제나 변경등의 작업도 비슷한식으로 작업이 가능하며 Entity Framework를 활용한 여러가지

데이터 조작 방법은 ASP.NET Core WebAPI 시작 글에서 생성한 컨트롤러를 참고하세요!

Comments