.NET Core & EntityFrameworkCore

前言

.NET Core 相比于 .NET Fromework 有跨平台、轻量化且开源的优势。

在使用 EntityFrameworkCore 的时候也遇到了很多问题,至于网络上的教程嘛...大部分都是老版本 project.json 的。而在v1.1.0版本时, .NET Core 已经放弃使用 project.json 而改为使用 *.csproj 配置文件(与 Visual Studio 相同)。

创建项目

  1. 在 CLI(本例中是cmd.exe) 中执行 md MVC 创建项目目录。

  2. 执行 cd MVC 进入目录。

  3. 执行 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.

  4. 执行 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.config

    Feeds used:
    https://api.nuget.org/v3/index.json
    C:\Program Files (x86)\Microsoft SDKs\NuGetPackages ```

  5. 执行 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 的各种引用

  1. 打开 MVC.csproj 项目配置文件,添加代码段。
    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
    </ItemGroup>
  2. 再次执行 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. ...

  3. 执行 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'.
    ```

  4. 执行 dotnet add package Microsoft.EntityFrameworkCore.SqlServer 添加包引用
  5. 执行 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_CATALOGTABLE_SCHEMATABEE_NAMETABLE_TYPE
DB1dbo__EFMigrationsHistoryBASE 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_CATALOGTABLE_SCHEMATABEE_NAMETABLE_TYPE
DB1dbo__EFMigrationsHistoryBASE TABLE
DB1dboMachineBASE TABLE

后记

  • dotnet add package 命令可以添加 package 引用(就像 NuGet 一样)
  • 在项目引用信息更改之后记得 dotnet restore 来还原 package
  • 下次修改 Model 之后,我们可以使用2个命令来完成数据库同步操作
    1. dotnet ef migrations add 命令来添加迁移信息
    2. dotnet ef database update 执行数据库迁移操作

参考资料

  1. Working with SQL Server LocalDB
  2. .NET Core
  3. .NET Command Line Tools
  4. EntityFrameworkCore v1.1.1 问题汇总

转载于:https://www.cnblogs.com/yeshiyu/p/7139551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值