|
|
|
|
# Quick Start on dotnet Core
|
|
|
|
|
|
|
|
|
|
* [.NET 5.0 Download](https://dotnet.microsoft.com/download) and install visual studio code
|
|
|
|
|
* alternative, install [visual studio Community](https://visualstudio.microsoft.com/vs/community/)
|
|
|
|
|
* [Reference](https://docs.microsoft.com/en-us/dotnet/core/tools/)
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
|
|
|
|
|
// list all templates
|
|
|
|
|
$ dotnet new --list
|
|
|
|
|
|
|
|
|
|
// scaffold a template project
|
|
|
|
|
$ dotnet new --install Microsoft.DotNet.Web.Spa.ProjectTemplates
|
|
|
|
|
|
|
|
|
|
// create REST Api project
|
|
|
|
|
$ dotnet new webapi
|
|
|
|
|
|
|
|
|
|
// list installed SDK
|
|
|
|
|
$ dotnet --list-sdks
|
|
|
|
|
|
|
|
|
|
// create global.json with configuration for SDK 3.1.101
|
|
|
|
|
// the config is used by .NET CLI to decide which SDK to build on
|
|
|
|
|
// By default, without this file, .NET CLI will use the latest SDK installed
|
|
|
|
|
$ dotnet new globaljson --sdk-version 3.1.101
|
|
|
|
|
|
|
|
|
|
// clean output of project
|
|
|
|
|
$ dotnet clean
|
|
|
|
|
|
|
|
|
|
// build the project
|
|
|
|
|
$ dotnet build
|
|
|
|
|
|
|
|
|
|
// run build assembly
|
|
|
|
|
$ dotnet myapp.dll
|
|
|
|
|
|
|
|
|
|
// build & run the current source project
|
|
|
|
|
$ dotnet run
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
$ dotnet add package <packagename>
|
|
|
|
|
|
|
|
|
|
// create solution group of projects
|
|
|
|
|
$ dotnet new sln -n mysolution
|
|
|
|
|
$ dotnet new console -o myapp
|
|
|
|
|
$ dotnet new classlib -o mylib1
|
|
|
|
|
$ dotnet new classlib -o mylib2
|
|
|
|
|
$ dotnet sln mysolution.sln add myapp\myapp.csproj
|
|
|
|
|
$ dotnet sln mysolution.sln add mylib1\mylib1.csproj --solution-folder mylibs
|
|
|
|
|
$ dotnet sln mysolution.sln add mylib2\mylib2.csproj --solution-folder mylibs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
* [Entity Framework Core](https://docs.microsoft.com/en-us/ef/) (EF Core) for SQL
|
|
|
|
|
* Microsoft.EntityFrameworkCore
|
|
|
|
|
* Microsoft.EntityFrameworkCore.Relational
|
|
|
|
|
* Microsoft.EntityFrameworkCore.SqlServer
|
|
|
|
|
* Microsoft.EntityFrameworkCore.Tools
|
|
|
|
|
* Pomelo.EntityFrameworkCore.MySql
|
|
|
|
|
* MySql.Data.EntityFrameworkCore (do not support ef migration)
|
|
|
|
|
* List of [EF Core Providers](https://docs.microsoft.com/en-us/ef/core/providers/?tabs=dotnet-core-cli)
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
// install ef core tool
|
|
|
|
|
$ dotnet tool install --global dotnet-ef
|
|
|
|
|
|
|
|
|
|
// update ef core tool
|
|
|
|
|
$ dotnet tool update --global dotnet-ef
|
|
|
|
|
///////////////////////////////
|
|
|
|
|
// Relaunch command prompt to effect the installation
|
|
|
|
|
/////////////////////////////
|
|
|
|
|
|
|
|
|
|
// add ef core design package to a project
|
|
|
|
|
$ dotnet add package Microsoft.EntityFrameworkCore.Design
|
|
|
|
|
|
|
|
|
|
// verify ef core installed
|
|
|
|
|
$ dotnet ef
|
|
|
|
|
|
|
|
|
|
// manage database
|
|
|
|
|
$ dotnet ef database
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// manage DBContext Type
|
|
|
|
|
$ dotnet ef dbcontext
|
|
|
|
|
|
|
|
|
|
// manage migrations
|
|
|
|
|
$ dotnet ef migrations
|
|
|
|
|
|
|
|
|
|
// Steps
|
|
|
|
|
// 1. Create models
|
|
|
|
|
// 2. Create the DBContext class
|
|
|
|
|
// 3. Configuration appsetting.json
|
|
|
|
|
// 4. configure service at starup class
|
|
|
|
|
//
|
|
|
|
|
// example cli execution
|
|
|
|
|
$ dotnet ef migrations add DbInit
|
|
|
|
|
$ dotnet ef database update
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## EF Core Migration Quick Guide
|
|
|
|
|
|
|
|
|
|
* [Reference](https://medium.com/@stas_khavruk/how-to-properly-use-ef-core-in-asp-net-core-with-mysql-database-a75f56c97318)
|
|
|
|
|
* Packages to add
|
|
|
|
|
* *Microsoft.EntityFrameworkCore*
|
|
|
|
|
* *Pomelo.EntityFrameworkCore.MySql*
|
|
|
|
|
* *Microsoft.EntityFrameworkCore.Tools*
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ dotnet add package Microsoft.EntityFrameworkCore
|
|
|
|
|
$ dotnet add package Pomelo.EntityFrameworkCore.MySql
|
|
|
|
|
$ dotnet add package Microsoft.EntityFrameworkCore.Tools
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* Models
|
|
|
|
|
|
|
|
|
|
```C#
|
|
|
|
|
namespace TempWeb.Models
|
|
|
|
|
{
|
|
|
|
|
public class Pet
|
|
|
|
|
{
|
|
|
|
|
public int Id { get; set; }
|
|
|
|
|
public string Name { get; set; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
namespace TempWeb.Models
|
|
|
|
|
{
|
|
|
|
|
public class User
|
|
|
|
|
{
|
|
|
|
|
public int Id { get; set; }
|
|
|
|
|
public string FirstName { get; set; }
|
|
|
|
|
public string LastName { get; set; }
|
|
|
|
|
|
|
|
|
|
public IList<Pet> Pets { get; set; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* DBContext
|
|
|
|
|
|
|
|
|
|
```C#
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
using TempWeb.Models;
|
|
|
|
|
|
|
|
|
|
namespace TempWeb.Data
|
|
|
|
|
{
|
|
|
|
|
public class DataContext : DbContext
|
|
|
|
|
{
|
|
|
|
|
public DbSet<Pet> Pets { get; set; }
|
|
|
|
|
public DbSet<User> Users { get; set; }
|
|
|
|
|
|
|
|
|
|
public DataContext(DbContextOptions<DataContext> options)
|
|
|
|
|
: base(options) { }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* appsettings.json
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
...
|
|
|
|
|
"ConnectionStrings": {
|
|
|
|
|
"DefaultConnection": "server=localhost;port=3306;database=test;user=test_user;password=test"
|
|
|
|
|
}
|
|
|
|
|
...
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* startup
|
|
|
|
|
|
|
|
|
|
```C#
|
|
|
|
|
...
|
|
|
|
|
using TempWeb.Data;
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
|
|
|
|
|
...
|
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
|
|
|
{
|
|
|
|
|
string mySqlConnectionStr = Configuration.GetConnectionString("DefaultConnection");
|
|
|
|
|
services.AddDbContextPool<DataContext>(
|
|
|
|
|
options => options.UseMySql(
|
|
|
|
|
mySqlConnectionStr, ServerVersion.AutoDetect(mySqlConnectionStr)
|
|
|
|
|
|
|
|
|
|
));
|
|
|
|
|
services.AddMvc();
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
* Controller with injected context
|
|
|
|
|
|
|
|
|
|
```C#
|
|
|
|
|
public class PetsController : ControllerBase
|
|
|
|
|
{
|
|
|
|
|
private readonly DataContext _context;
|
|
|
|
|
|
|
|
|
|
public PetsController(DataContext context)
|
|
|
|
|
{
|
|
|
|
|
_context = context;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* CLI
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
$ dotnet ef migrations add DbInit
|
|
|
|
|
$ dotnet ef database update
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
* Alternative, using `Package Manager Console` (Visual Studio)
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
PM> Add-Migration DbInit
|
|
|
|
|
PM> Update-Database
|
|
|
|
|
```
|
|
|
|
|
|