티스토리 뷰

반응형

4번째 동영상은 EF Core에서 다른 Database 엔진을 사용하는 방법에 대해서 다루고 있습니다.

 

EF Core에서 사용 가능한 전체 Database Provider의 종류는 여기서 확인할 수 있습니다.

Entity Framework Core 시작(1/5) 에서 생성한 모델을 이용하도록 하겠습니다.

Entity Framework Core 시작(3/5) 에서 생성한 프로젝트와 같이 Web Application을 생성해서 진행하도록 하겠습니다.

 

Database Provider는 데이터베이스와 Entity Framework 중간에 위치하며, 둘 사이의 커뮤니케이션 역할을 담당하고 있습니다. 그래서, 프로바이더만 변경하면, 다른 Database를 사용하는 것이 매우 쉽습니다.

 

Web Application 생성

공통 NuGet package 추가

Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.Tools, Microsoft.VisualStudio.Web.CodeGeneration.Design를 설치합니다.

 

SQLite 지원

SQLite는 오픈소스 크로스플렛폼 데이터베이스로 embedded 데이터베이스 기술입니다.

NuGet package 추가

Microsoft.EntityFrameworkCore.Sqlite를 설치합니다. 최종 결과는 아래와 같습니다.

프로젝트에 Data 폴더와 Models 폴더를 추가합니다.

Models 폴더에 4개의 클래스를 추가합니다.

아래 소스에는 namespace가 입력되어 있습니다. 코드 작업하실 때 주의 하시기 바랍니다.
//Customer.cs
using System.Collections.Generic;

namespace ContosoPets3.Models
{
    public class Customer
    {
#nullable enable 
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string? Address { get; set; }
        public string? Phone { get; set; }
#nullable disable
        public ICollection<Order> Orders { get; set; }
    }
}


//Order.cs
using System;
using System.Collections.Generic;

namespace ContosoPets3.Models
{
    public class Order
    {
        public int Id { get; set; }
        public DateTime OrderPlaced { get; set; }
        public DateTime? OrderFulfilled { get; set; }
        public int CustomerId { get; set; }

        public Customer Customer { get; set; }
        public ICollection<ProductOrder> ProductOrders { get; set; }
    }
}


//Product.cs
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ContosoPets3.Models
{
    public class Product
    {
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }
        [Column(TypeName = "decimal(18, 2)")]
        public decimal Price { get; set; }
    }
}


//ProductOrder
namespace ContosoPets3.Models
{
    public class ProductOrder
    {
        public int Id { get; set; }
        public int Quantity { get; set; }
        public int ProductId { get; set; }
        public int OrderId { get; set; }

        public Order Order { get; set; }
        public Product Product { get; set; }
    }
}

Data 폴더에 다음 클래스를 추가합니다.

//ContosoPetsContext.cs
using ContosoPets3.Models;
using Microsoft.EntityFrameworkCore;

namespace ContosoPets3.Data
{
    public class ContosoPetsContext : DbContext
    {
        public ContosoPetsContext(DbContextOptions<ContosoPetsContext> options)
            : base(options)
        {
        }

        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Product> Products { get; set; }
        public DbSet<ProductOrder> ProductOrders { get; set; }
    }
}

Startup.cs 파일에 Sqlite를 위한 Connection String을 추가합니다.

//Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddDbContext<ContosoPetsContext>(options => 
                options.UseSqlite("Data Source=ContosoPets.db"));
        }

테이블(데이터베이스) 생성

Package manager Console 창에 아래 명령을 순차적으로 입력합니다.

Add-Migration InitialCreate

Update-Database

이 생성 방법 말고도 EnsureCreated()를 이용하는 방법도 있습니다. 하지만, 이 메소드를 이용해서 생성하면 히스토리가 남지 않기 때문에 사용시 유의해야 합니다.

Customer CRUD를 위한 페이지 추가

Pages 폴더 하위에 Customers 폴더 추가 후 Add -> Razor Page를 클릭

Customer와 ContosoPetsContext를 선택하고 Add 버튼을 눌러서 마무리 합니다.

아래와 같은 오류 발생시 여기 참고
System.ArgumentException
  HResult=0x80070057
  Message=AddDbContext was called with configuration, but the context type 'ContosoPetsContext' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then 'ContosoPetsContext' should declare a constructor that accepts a DbContextOptions<ContosoPetsContext> and must pass it to the base constructor for DbContext.
  Source=Microsoft.EntityFrameworkCore

 

결과 확인

F5 실행을 눌러서 브라우저로 실행

주소는 https://localhost:44381/customers/index를 입력하면 됨

Create New 클릭 -> 내용 입력 -> Create

 

데이터 확인

우선 Sqlite를 사용하는 방법에 대해서 알아 보았습니다.

다른 프로바이더에 대한 자세한 사용법은 다음에 기회가 되면 올리도록 하겠습니다.

 

 

 

반응형

'Entity Framework Core' 카테고리의 다른 글

ADO.NET과 ORM 비교  (0) 2021.01.12
Entity Framework Core 시작(5/5)  (2) 2021.01.07
Entity Framework Core 시작(3/5)  (0) 2020.12.28
SQL Sever Express vs SQLite  (0) 2020.12.27
Entity Framework Core 시작(2/5)  (2) 2020.12.19
댓글