前言
.NET Core 相比于 .NET Fromework 有跨平台、轻量化且开源的优势。
在使用 EntityFrameworkCore 的时候也遇到了很多问题,至于网络上的教程嘛...大部分都是老版本 project.json
的。而在v1.1.0版本时, .NET Core 已经放弃使用 project.json
而改为使用 *.csproj
配置文件(与 Visual Studio 相同)。
创建项目
在 CLI(本例中是cmd.exe) 中执行
md MVC
创建项目目录。执行
cd MVC
进入目录。执行
dotnet new mvc
创建一个MVC类型的项目。D:\-\DotNetCore\MVC>dotnet new mvc Content generation time: 457.6164 ms The template "ASP.NET Core Web App" created successfully.
执行
dotnet restore
来还原依赖文件。
```
D:-\DotNetCore\MVC>dotnet restore
Generating MSBuild file
...
NuGet Config files used:
C:\Users\ASUS\AppData\Roaming\NuGet\NuGet.Config
C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.configFeeds used:
https://api.nuget.org/v3/index.json
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages ```执行
dotnet run
来测试是否成功创建了项目。D:\-\DotNetCore\MVC>dotnet run Hosting environment: Production Content root path: D:\-\DotNetCore\MVC Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
如此,一个基于 .NET Core 的 MVC 项目便已经成功创建。
添加 EntityFrameworkCore 的各种引用
- 打开
MVC.csproj
项目配置文件,添加代码段。- 可以在微软官方文档 .NET Command Line Tools 中找到相关信息。
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> </ItemGroup>
再次执行
dotnet restore
来还原 EntityFrameworkCore.Tool 工具。Restoring packages for D:\-\DotNetCore\MVC\MVC.csproj... Restoring packages for D:\-\DotNetCore\MVC\MVC.csproj... Installing Microsoft.NETCore.Jit 1.0.2. Installing System.Net.Security 4.0.0. Installing Microsoft.NETCore.Runtime.CoreCLR 1.0.2. Installing Microsoft.NETCore.DotNetHostPolicy 1.0.1. Installing Microsoft.NETCore.App 1.0.0. Installing Microsoft.EntityFrameworkCore.Tools.DotNet 1.0.0. Restore completed in 1.2 sec for D:\-\DotNetCore\MVC\MVC.csproj. ...
执行
dotnet add package Microsoft.EntityFrameworkCore.Design
添加包
```
D:-\DotNetCore\MVC>dotnet add package Microsoft.EntityFrameworkCore.Design
Microsoft (R) Build Engine version 15.1.1012.6693
Copyright (C) Microsoft Corporation. All rights reserved.Writing
...
info : PackageReference for package 'Microsoft.EntityFrameworkCore.Design' version '1.1.2' added to file 'D:-\DotNetCore\MVC\MVC.csproj'.
```- 执行
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
添加包引用- 可以在 aspnet/EntityFramework 上找到对应的数据库配置信息包。
- 执行
dotnet restore
来还原各种包- 执行
dotnet ef
来测试 EntityFrameworkCore.Tool 是否成功安装_/\__ ---==/ \\ ___ ___ |. \|\ | __|| __| | ) \\\ | _| | _| \_/ | //|\\ |___||_| / \\\/\\
- 执行
使用 Code-First
创建实体模型并配置 DbContext 信息,如同在其他 MVC 项目中使用 EF 一般。
//Machine.cs
using System.ComponentModel.DataAnnotations;
namespace MVC{
public class Machine{
[Key]
public int Id{ get; set; }
[Required]
public string Title { get; set; }
public string Memo { get; set; }
}
}
//MyContext.cs
using Microsoft.EntityFrameworkCore;
namespace MVC
{
public class MyContext : DbContext
{
public virtual DbSet<Machine> Machine { get; set; }
}
}
添加数据库配置
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddDbContext<MyContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyContext")));
}
//MyContext.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
namespace MVC
{
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> option)
: base(option) { }
public virtual DbSet<Machine> Machine { get; set; }
}
}
在 appsettings.json
中添加数据库连接配置节
//appsettings.json
"ConnectionStrings": {
"MyContext": "Server=(localdb)\\mssqllocaldb;Database=DB1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
使用 dotnet-database 创建数据库
执行 dotnet ef database update
来创建数据库
D:\-\DotNetCore\MVC>dotnet ef database update
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:03.59
Done.
然后我们可以查看表结构
SELECT * FROM INFORMATION_SCHEMA.TABLES;
TABLE_CATALOG | TABLE_SCHEMA | TABEE_NAME | TABLE_TYPE |
---|---|---|---|
DB1 | dbo | __EFMigrationsHistory | BASE TABLE |
使用 dotnet-migration 更新数据库
我们通过 dotnet ef migrations add init
(命名可以随意)来添加一个迁移描述文件。
D:\-\DotNetCore\MVC>dotnet ef migrations add init
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:03.11
Done. To undo this action, use 'ef migrations remove'
执行 dotnet ef database update
来更新模型到数据库
TABLE_CATALOG | TABLE_SCHEMA | TABEE_NAME | TABLE_TYPE |
---|---|---|---|
DB1 | dbo | __EFMigrationsHistory | BASE TABLE |
DB1 | dbo | Machine | BASE TABLE |
后记
dotnet add package
命令可以添加 package 引用(就像 NuGet 一样)- 在项目引用信息更改之后记得
dotnet restore
来还原 package - 下次修改 Model 之后,我们可以使用2个命令来完成数据库同步操作
dotnet ef migrations add
命令来添加迁移信息dotnet ef database update
执行数据库迁移操作