C#

.NET Core – csharpstudy 유튜브 강의 정리

 

 

  1. .NET Core 시작하기 - 설치, 빌드, 실행 방법
  2. .NET Core 기초 - GUI 프로그래밍 시작하기
  3. .NET Core - Entity Framework Core 기초
  4. ASP.NET Core MVC 시작하기

 

 


 

.NET Core 시작하기 - 설치, 빌드, 실행 방법

 

.NET Core SDK 설치
https://dotnet.microsoft.com/download/dotnet-core

 

프로젝트 폴더 만들기
md Console1

 

템플릿 목록 보기
dotnet new --list

 

콘솔 프로젝트 생성
dotnet new console

 

노트패드로 소스코드 보기
notepad Program.cs

 

빌드하기
dotnet build

 

실행하기
dotnet run

 

실제 코드는 dll 파일이므로 실행할 수 있다.
dotnet Console1.dll

 

닷넷코어 런타임을 포함해서 win-64용으로 빌드하기
Console1 폴더로 이동한다
dotnet build --runtime win-x64

 

닷넷코어의 장점은 크로스 플랫폼에서 사용할 수 있다는 점이다.

 

리눅스용 x64로 빌드하기 (--runtime 또는 -r)
dotnet build -r linux-x64

 

맥용으로 x64로 빌드하기
dotnet build -r osx-x64

 


 

.NET Core 기초 - GUI 프로그래밍 시작하기

 

WPF : 정상 지원
WinForms
- Form Designer : VS 2019 v16.5 에서 지원 예정

Windows Only

.NET Framework 4.8 이 마지막이 될 것이다.

 

WPF 프로젝트 만들기
dotnet new wpf

 

WinForms 프로젝트 만들기
dotnet new winforms

 

다른 컴퓨터에 사용할 수 있도록 publish 하기
Folder 선택
Configuration : Release 클릭
Deployment Mode : 프레임워크를 포함할 것인지 여부
Publish 버튼 클릭

 


 

.NET Core - Entity Framework Core 기초

 

데이터베이스에 액세스하는 프레임워크

EF Core
ORM 툴 - Object-Relational Mapping (C# 클래스와 SQL 을 매핑)

 

누겟 패키지 3개를 다운로드 해야함
누겟 패키지 매니저에서 entity framework 로 검색

  1. Microsoft.EntityFrameworkCore.SqlServer
  2. Microsoft.EntityFrameworkCore.Design
  3. Microsoft.EntityFrameworkCore.Tools

 

폴더 만들기
Model

 

Model 폴더에 클래스 만들기
Employee.cs

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace EFTest.Models
{
    [Table("Employee")]  // 테이블 이름이 다를 때
    public class Employee
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime DOB { get; set; }
        public decimal Salary { get; set; }
    }
}

 

Model 폴더에 클래스 만들기
MyDbContext

using Microsoft.EntityFrameworkCore;

namespace EFTest.Models
{
    class MyDbContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // (local) 또는 .
            optionsBuilder.UseSqlServer(@"Data Source=(local);Initial Catalog=MyDB;Integrated Security=SSPI");
        }
        public DbSet<Employee> Employees { get; set; }
    }
}

 

Tools - 누겟 패키지 매니저 - 패키지 매니저 콘솔
Add-Migration mig1  // 마이그레이션 관련 파일 만들기
Update-Database  // 데이터베이스 업데이트

 

Insert 와 Select

using EFTest.Models;
using System;
using System.Linq;

namespace EFTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // insert
            MyDbContext db = new MyDbContext();

            Employee emp = new Employee
            {
                Name = "Tom",
                DOB = new DateTime(1999, 5, 10),
                Salary = 50000            
            };

            db.Employees.Add(emp);

            Employee emp2 = new Employee
            {
                Name = "Jack",
                DOB = new DateTime(1999, 5, 10),
                Salary = 50000
            };

            db.Employees.Add(emp2);
            db.SaveChanges();

            // Select
            var emps = db.Employees.Where(p => p.Id >= 1);
            foreach (var item in emps)
            {
                Console.WriteLine($"{item.Id}, {item.Name}");
            }
        }
    }
}

 

 


 

ASP.NET Core MVC 시작하기

 

프로젝트 추가
ASP .NET Core Web Application
Web Application (Model-View-Controller)

 

Controller
- 사용자의 리퀘스트를 받아서 모델을 불러와서 뷰를 반환

 

localhost:port/home/index
HomeController (Home 이 URL 부분)
public IActionResult Index() (Index가 URL 부분)

index() 의 뷰를 보고 싶다면
Index() 함수에서 오른쪽 버튼 누루고 Go To View

 

전체 템플릿 소스 파일
Views/_ViewStart.cshtml 에서 _Layout 이 템플릿 파일 이름 (_Layout.cshtml)

 

Views/Shared/_Layout.cshtml
@RenderBody() // 이 부분에 Index.cshtml 의 부분 소스가 들어감

 

Razor syntax
@{ } // C# 코드가 들어감 // Razor syntax
@변수 // 한줄일 때

 

# Index.cshtml

@{
    ViewData["Title"] = "Home Page";
    string str = "Welcome";
}

<div class="text-center">
    <h1 class="display-4">@str</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>

    @for (int i = 0; i < 10; i++)
    {
        <p>@i</p>
    }
</div>

 

저자 리스트 메뉴 추가하기

# _Layout.cshtml

<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="AuthorList">저자 리스트</a>
</li>

 

# HomeController.cshtml

public IActionResult AuthorList()
{
    return View();
}

 

# AuthorList 의 뷰 추가
AuthorList() 메서드 부분에서 오른쪽 버튼 누루고 Add View 선택 -> Razor View -> 기본값 선택

 

Models 폴더에 클래스 파일 생성
Author.cs

public class Author
{
    public string name { get; set; }
    public string address { get; set; }
}

 

# HomeController.cs

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IWebHostEnvironment webHostEnvironment;

    public HomeController(ILogger<HomeController> logger, IWebHostEnvironment webHostEnvironment)
    {
        _logger = logger;
        this.webHostEnvironment = webHostEnvironment;
    }

    ...

    public IActionResult AuthorList()
    {
        string path = Path.Combine(webHostEnvironment.ContentRootPath, "authors.txt");
        string jsonStr = System.IO.File.ReadAllText(path);
        List<Author> authors = JsonSerializer.Deserialize<List<Author>>(jsonStr);
        return View(authors);
    }

 

# View 의 AuthorList.cshtml

@model List<Author> 
@{
    ViewData["Title"] = "AuthorList";
}

<h1>저자리스트</h1>
<table class="table">
    @foreach (var author in Model)
    {
        <tr>
            <td>
                @author.name
            </td>
            <td>@author.address</td>
        </tr>
    }
 </table>

 

# authors.txt

[
  {
    "name": "1번",
    "address": "서울 Hello World"
  },
  {
    "name": "2번",
    "address": "대전 Hello World"
  },
  {
    "name": "3번",
    "address": "대구 Hello World"
  },
  {
    "name": "4번",
    "address": "부산 Hello World"
  },
  {
    "name": "5번",
    "address": "광주 Hello World"
  },
  {
    "name": "6번",
    "address": "인천 Hello World"
  },
  {
    "name": "7번",
    "address": "울산 Hello World"
  }
]

 


 

 

 

 

 

 

 

 

 

Related posts

Leave a Comment