Mac에서 ASP.NET5 MVC6 (DB(sqlite) 연계해 본다)

17814 단어 아 SP. 네 Tsqlite
dnx라고 하는지, asp.net mvc6라고 하는지, EntiryFramework의 버젼이 beta6가 되어, sqlite가 제대로 사용할 수 있게 되었으므로, asp.net5 mvc6 환경에서 움직여 봅니다.

베이스로서는 sqlite 활용 샘플을 이용합니다.

환경 설정이나 원래 sqlite와의 제휴에 대해서는, 미안하지만 과거 기사
  • Mac에서 ASP.NET
  • Mac에서 ASP.NET5 MVC6 (잠깐 만져보는 편)
  • Mac에서 EntityFramework7 (beta6)을 통해 sqlite 사용

  • 를 보십시오.

    진행하다



    편지지 파일 만들기



    여기서 yeomen을 사용합니다.
    yo aspnet
    

    여기에서 Web Application Basic [without Membership and Authorization]을 선택합니다. 보통의 Web Application이라도 좋습니다만, Models라든지, Migrations라든지가 엉망이 되기 때문에, Basic으로 합니다.
         _-----_
        |       |    .--------------------------.
        |--(o)--|    |      Welcome to the      |
       `---------´   |   marvellous ASP.NET 5   |
        ( _´U`_ )    |        generator!        |
        /___A___\    '--------------------------'
         |  ~  |
       __'.___.'__
     ´   `  |° ´ Y `
    
    ? What type of application do you want to create?
      Empty Application
      Console Application
      Web Application
    ❯ Web Application Basic [without Membership and Authorization]
      Web API Application
      Nancy ASP.NET Application
      Class Library  
    

    웹 앱 이름을 듣기 때문에 여기에서는 WebApp로 합니다.
    그러면 WebApp이라는 폴더가 만들어지고 편지지 파일이 생성됩니다.

    필요한 라이브러리 로드



    project.json을 열고 dependencies에
  • EntityFramework.Sqlite
  • EntityFramework.Commands

  • 를 추가합니다.
    또한 EntiryFramework.Commands 호출을 단순화하기 위해 commands에,
  • "ef": "EntityFramework.Commands"

  • 를 추가합니다.

    project.json 발췌
    {
      "webroot": "wwwroot",
      "version": "1.0.0-*",
    
      "dependencies": {
        "Microsoft.AspNet.Diagnostics": "1.0.0-beta6",
        "Microsoft.AspNet.Mvc": "6.0.0-beta6",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta6",
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta6",
        "Microsoft.AspNet.Server.Kestrel": "1.0.0-beta6",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6",
        "Microsoft.AspNet.StaticFiles": "1.0.0-beta6",
        "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta6",
        "Microsoft.Framework.Configuration.Json": "1.0.0-beta6",
        "Microsoft.Framework.Logging": "1.0.0-beta6",
        "Microsoft.Framework.Logging.Console": "1.0.0-beta6",
        "Kestrel": "1.0.0-beta6",
        "EntityFramework.SQLite": "7.0.0-beta6",
        "EntityFramework.Commands": "7.0.0-beta6"
      },
    
      "commands": {
        "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --config hosting.ini",
        "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --config hosting.ini",
        "ef": "EntityFramework.Commands"
      },
    

    편집이 끝나면 dnu restore를 실행하고 필요한 라이브러리를 읽습니다.
    dnu restore
    

    문제가 없으면 우선 준비가 완료됩니다.

    일단 실행해 보자.



    우선 표준 웹 화면이 표시되는지 살펴보겠습니다.
    dnx . kestrel
    

    kestrel이라는 웹 서버를 시작하고 Started가되면 OK입니다.
    http://localhost:5000/ 로 이동합니다. 페이지가 표시되면 OK입니다.

    또한,
    dnx . ef
    

    를 실행하여 EntiryFramework 명령 화면이 표시되는지 확인합니다.

    모델 추가



    프로젝트의 첫 번째 계층에 Models 폴더를 만들고 그 안에 Model.cs를 만듭니다.
    과거 기사의 샘플 코드를 이용하고 있는 사람은, Namespace에게만 조심해 주세요.
    using Microsoft.Data.Entity;
    using System.Collections.Generic;
    
    namespace WebApp.Models
    {
        public class BloggingContext : DbContext
        {
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseSqlite("Data Source=./blog.db");
            }
        }
    
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
            public string Name { get; set; }
    
            public List<Post> Posts { get; set; }
        }
    
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }
    

    여기서 한 번 빌드해 둡니다.
    dnu build --quiet
    

    Warning 또는 Error가 표시되지 않는지(0) 확인합니다.

    Migration 파일 생성



    Model.cs의 정보를 바탕으로 ef 명령을 사용하여 DB 생성을 위한 Migration 파일을 생성합니다.
    dnx . ef migration add MyFirstMigration
    

    Migrations 폴더가 생성되고 그 안에 마이그레이션 관련 파일이 생성됩니다.

    Migration 실행



    DB를 생성하기 위해 마이그레이션을 수행합니다. 하지만 그대로라면 오류가 나오므로 마이그레이션 파일(xxxxxx_MyFirstMigration.cs)을 편집합니다.

    BlogId와 PostId를 제어하는 ​​코드 줄에서 .Annotation()을 제거합니다.
    BlogId = table.Column(type: "INTEGER", nullable: false)
                            .Annotation("Sqlite:Autoincrement", true),
    

    ,
    BlogId = table.Column(type: "INTEGER", nullable: false),
    

    라고 합니다. PostId도 마찬가지로 대응합니다.
    편집이 완료되면 Migration을 실행합니다.
    dnx . ef migration apply
    

    Done.이 되면 우선 OK입니다.

    프로젝트 폴더에 blog.db 파일이 있기 때문에 sqlite 콘솔에서 샘플 데이터를 몇 개 삽입합니다. 다른 방법은 할애.
    절각이므로 Linq를 사용해 보겠습니다. 모든 것을 받고 View에 전달합니다.

    Controller로 데이터 가져오기



    이번은 처음부터 존재하는 HomeController.cs에 List() 메소드를 추가해 대응합니다.
    다음은 List()만 발췌한 것입니다. 절각이므로 Linq를 사용해 보았습니다.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNet.Mvc;
    
    using WebApp.Models;
    
    namespace WebApp.Controllers
    {
        public class HomeController : Controller
        {
    
            public IActionResult List()
            {           
                using (var db = new BloggingContext())
                {
    
                    //linq
                    var query = from b in db.Blogs
                        select b;
    
                    //return  
                    return View(query);
                }
            }
        }
    }
    

    View에서 보기



    Views->Home 폴더 안에 List.cshtml을 만들고 다음 코드를 작성합니다.
    @model IEnumerable<WebApp.Models.Blog>
    <h3>List</h3>
    @foreach(var item in Model)
    {
        @item.BlogId @item.Url<br>
    }
    

    볼 수 있었습니다.
    aspnetsqlite
    DB가 sqlite이므로, 본격적인 서비스에는 적합하지 않습니다만, MySQL의 프로바이더가 나오면 꽤 기대할 수 있을 것 같습니다.

    좋은 웹페이지 즐겨찾기