Reference address
Entity Framework Official website
ASP. NET core MVC and EF Core-tutorial Series
Environment
Visual Studio 2017
Latest version of the. NET Core 2.0 SDK
Latest version of Windows PowerShell
Start building
1. Create a new project in Visual Studio 2017
- "file" > "New" > "Project"
- Choose Installed > Templates > Visual C # >. NET Core from the left menu.
- select "ASP. NET Core Web application".
- enter "EFGetStarted.AspNetCore.NewDb" as the name, then click OK.
- in "New ASP. NET Core Web Application dialog box:
- Make sure the drop-down list is selected. NET core and ASP. 2.0
- select "Web application ( Model View Controller) "project template
- Make sure" Authentication "is set to" No Authentication "
- Click OK
2. Install the Entity Framework Core
- Tools > NuGet Package Manager > Package Manager console
1.1. Installing the database Provider
MSSQL Run
Install-package Microsoft.EntityFrameworkCore.SqlServer
MySQL Run
Grapefruit: Install-package POMELO.ENTITYFRAMEWORKCORE.MYSQL
Or
Official: Install-package mysql.data.entityframeworkcore-version 8.0.11
1.2. install the Package Manager console
Run: Install-package Microsoft.EntityFrameworkCore.Tools
1.3. Installation Design Package
Run: Install-package Microsoft.EntityFrameworkCore.Design
Data Base provides program design time package (EF Core 2.0 no longer required )
MSSQL Run: Install-package Microsoft.EntityFrameworkCore.SqlServer.Design
MYSQL Run: Install-package Pomelo.EntityFrameworkCore.MySql.Design
DB first--Creating a model from an existing database
MySQL Run
Scaffold-dbcontext-connection "Server=localhost; User Id=root; PASSWORD=123456;DATABASE=VANFJ "-provider" POMELO.ENTITYFRAMEWORKCORE.MYSQL "-outputdir" Models "
MSSQL Run
Scaffold-dbcontext-connection "Server=localhost; User Id=root; PASSWORD=123456;DATABASE=VANFJ "-provider" Microsoft.EntityFrameworkCore.SqlServer "-outputdir" Models "
Usage Note: Replace the connection string in connection with your own database connection, replacing models in OutputDir with the file directory name you want to generate
Code first--from model generation to database
1. Create a model
1.1. Create Schoolcontext context
Public classschoolcontext:dbcontext{ PublicSchoolcontext (dbcontextoptions<schoolcontext> options):Base(options) {} PublicDbset<course> Courses {Get;Set; } Publicdbset<enrollment> Enrollments {Get;Set; } PublicDbset<student> Students {Get;Set; }protected Override voidonmodelcreating (ModelBuilder ModelBuilder) {modelbuilder.entity<Course> (). ToTable ("Course"); Modelbuilder.entity<Enrollment> (). ToTable ("Enrollment"); Modelbuilder.entity<Student> (). ToTable ("Student");}} Public classstudent{ Public intID {Get;Set; } Public stringLastName {Get;Set; } Public stringFirstmidname {Get;Set; } PublicDateTime EnrollmentDate {Get;Set; } Publicicollection<enrollment> Enrollments {Get;Set; }} Public enumGrade {A, B, C, D, F} Public classenrollment{ Public intEnrollmentid {Get;Set; } Public intCourseID {Get;Set; } Public intStudentID {Get;Set; } PublicGrade? Grade {Get;Set; } PublicCourse Course {Get;Set; } PublicStudent Student {Get;Set; }} {A, B, C, D, F} Public classenrollment{ Public intEnrollmentid {Get;Set; } Public intCourseID {Get;Set; } Public intStudentID {Get;Set; } PublicGrade? Grade {Get;Set; } PublicCourse Course {Get;Set; } PublicStudent Student {Get;Set; }} Public classcourse{[databasegenerated (databasegeneratedoption.none)] Public intCourseID {Get;Set; } Public stringTitle {Get;Set; } Public intCredits {Get;Set; } Publicicollection<enrollment> Enrollments {Get;Set; }}
View Code
1.2. startup file Injection Context
EF Core in version 2.0, a new way to register custom DbContext types in dependency injection is to introduce a pool of reusable DbContext instances in a transparent manner.
To use the DbContext pool, use Adddbcontextpool instead of Adddbcontext during service registration
Public void configureservices (iservicecollection services) {services. Adddbcontextpool<SchoolContext> (Options andoptions). Usemysql (configuration.getconnectionstring ("defaultconnection"= = Newtonsoft.Json.ReferenceLoopHandling.Ignore);}
View Code
1.3. Add a connection string to the Appsettings.json file
{"ConnectionStrings": {"defaultconnection":"Server=localhost; User Id=root; PASSWORD=123456;DATABASE=VANFJ"},"Logging": {"Includescopes":false,"LogLevel": {"Default":"Warning"}}}
View Code
2. Execute the nuget command to create the database
Building Scaffolding for migrations
Run: add-migration initialcreate
Apply a new migration to a database
Run: Update-database
EF Core 2.0 nuget command
Get-help about_entityframeworkcore Get EF Core command Help
Add a migration database to migrate the name directory (and its child namespace) path is relative to the project directory. The default value is "migrations".
Add-migration-name <String>-outputdir <String>
Add-migration Initialcreate The first time to perform initialization with this
Deleting the last Migration database does not check to see if the migration has been applied to the database.
Remove-migration-force
Target migration. If "0", all migrations will be resumed. Default to the last migration.
Update-database
Update-database lastgoodmigration Restore Migration
The database displayed by the delete database is discarded, but it is not deleted
Drop-database-whatif
Get-dbcontext getting information about the DbContext type
Updating DbContext and entity types from a database
Scaffold-dbcontext
-connection <String> Database connection string.
-provider <String> the provider to use. (e.g. Microsoft.EntityFrameworkCore.SqlServer)
-outputdir <string > The directory where you want to put the file. The path is relative to the project directory.
--context <string > to generate the DbContext name.
-schemas <String[]> to generate the table schema for the entity type.
-tables <String[]> the table to generate the entity type for.
-dataannotations uses properties to configure the model, if possible. If omitted, only the fluent API is used.
-usedatabasenames is used directly from database tables and column names.
-force Overwrite existing files.
SQL scripts generated from the migration
Script-migration
-from <String> start migration. Default value is 0 (initial database)
-to <String> end of migration. Default to Last Migration
-idempotent generate scripts that can be used in any migrated database
-output <String> files to write the results to
EF Core 2.0 uses Mssql/mysql for DB first and code first