ASP.NET Core에서 SQLite 데이터베이스 생성

새 프로젝트 만들기



  • dotnet new 명령 에서 새 프로젝트를 만듭니다.
  • dotnet new web -o CreateDbSample
    cd CreateDbSample
    

    SQLite 패키지 추가


  • ASP.NET에서 SQLite를 처리하기 위한 패키지를 설치합니다.
  • dotnet add package Microsoft.EntityFrameworkCore.Sqlite
    

    모델 만들기


  • 이번에는 상품 모델을 작성합니다.
  • 모델은 데이터베이스 레코드 당입니다.
  • 프로젝트 루트에 Models 폴더를 만들고 Models 폴더에 Product.cs를 만듭니다.

  • ./Models/Product.cs
    namespace CreateDbSample.Models
    {
        public class Product
        {
            // ID は自動で主キー
            public int ID { get; set; }
            public string Name { get; set; }
            public int Price { get; set; }
        }
    }
    


    데이터베이스 컨텍스트 만들기


  • Models 폴더에 ShopDbContext.cs를 만듭니다.
  • 이 컨텍스트를 통해 DB에 액세스합니다.
  • DbSet<Product> 가 테이블 이미지입니다.

  • ./Models/ShopDbContext.cs
    using Microsoft.EntityFrameworkCore;
    
    namespace CreateDbSample.Models
    {
        public class ShopDbContext : DbContext
        {
            public ShopDbContext(DbContextOptions options)
                : base(options) { }
    
            public DbSet<Product> Products { get; set; }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) =>
                optionsBuilder.UseSqlite("Data Source=shop.db");
        }
    }
    


    Startup.cs 편집


  • 데이터베이스 컨텍스트를 DI 컨테이너에 등록합니다.
  • 나중에 웹 API에서 동의하도록 AddMvc UseMVC 를 설정합니다.
  • using CreateDbSample.Models;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace CreateDbSample
    {
        public class Startup
        {
            // This method gets called by the runtime. Use this method to add services to the container.
            // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc();
                services.AddDbContext<ShopDbContext>();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                    app.UseDeveloperExceptionPage();
                app.UseMvc();
                app.Run(async (context) => await context.Response.WriteAsync("Hello World!"));
            }
        }
    }
    

    데이터베이스 생성


  • 데이터베이스의 설계도가 될 마이그레이션 파일을 스캐폴딩합니다.
  • dotnet ef migrations add Initial
    
  • Migrations가 추가되고 그 안에 <timestamp>_initial.cs가 추가됩니다.
  • using Microsoft.EntityFrameworkCore.Migrations;
    
    namespace CreateDbSample.Migrations
    {
        public partial class Initial : Migration
        {
            protected override void Up(MigrationBuilder migrationBuilder)
            {
                migrationBuilder.CreateTable(
                    name: "Products",
                    columns: table => new
                    {
                        ID = table.Column<int>(nullable: false)
                            .Annotation("Sqlite:Autoincrement", true),
                        Name = table.Column<string>(nullable: true),
                        Price = table.Column<int>(nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_Products", x => x.ID);
                    });
            }
    
            protected override void Down(MigrationBuilder migrationBuilder)
            {
                migrationBuilder.DropTable(
                    name: "Products");
            }
        }
    }
    

  • 데이터베이스를 생성하려면 다음 명령을 입력합니다.
  • dotnet ef database update
    

    프로젝트의 루트 폴더에 shop.db가 추가됩니다.



    웹 API에서 동작 확인


  • Controllers/productsController.cs 를 작성합니다.
  • 상품 추가와 상품 일람 취득의 메소드를 가집니다.
  • using CreateDbSample.Models;
    using Microsoft.AspNetCore.Mvc;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace CreateDbSample.Controllers
    {
        [Route("api/[controller]")]
        [ApiController]
        public class ProductsController : ControllerBase
        {
            ShopDbContext Context { get; set; }
            public ProductsController(ShopDbContext context)
            {
                Context = context;
            }
    
            [HttpPost]
            public Product AddProduct(Product product)
            {
                Context.Products.Add(product);
                Context.SaveChanges();
                return product;
            }
    
            [HttpGet]
            public IEnumerable<Product> GetProducts() => Context.Products.ToList();
        }
    }
    
    dotnet run 서버를 시작합니다.
    POSTMAN에서 작동을 확인합니다.
  • 추가

  • 일람 취득

  • SQLite 데이터베이스가 실행 중임을 확인했습니다!

    좋은 웹페이지 즐겨찾기