.NET Core – csharpstudy 유튜브 강의 정리
- .NET Core 시작하기 - 설치, 빌드, 실행 방법
- .NET Core 기초 - GUI 프로그래밍 시작하기
- .NET Core - Entity Framework Core 기초
- 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 로 검색
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Design
- 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"
}
]