.Net Core使用EF连接数据库的两种方式,CodeFirst & DBFirst

2020-10-16

新建一个Core类库项目 CodeFirstCore

新建一个.Net Core API项目

新建一个Service项目

CodeFirst 通过命令使用模型生成数据库

DBFirst

新建一个Core 类库项目DBFirstCore

新建一个Core API项目

新建一个Service项目

值得一提

其他

今天简单整理一下.Net Core使用EF连接数据库的两种方式,Code First和DBFirst。VS未提供图形化界面,所以连接操作基本是以命令行的方式完成的。本文以MySql为例,先从Code First开始吧。

新建一个Core类库项目 CodeFirstCore

下载依赖包

新建一个Person类

新建一个Context类

项目结构图

image-20201015212107120

新建一个.Net Core API项目

安装依赖包

在Startup.cs的ConfigureServices方法中加入数据库配置

新建PersonController,用于测试(会单元测试的,建议用单元测试)

项目结构

image-20201015215211153

新建一个Service项目

用于操作数据库,具体就不贴出来了,这里主要贴一下PersonService.cs

项目结构

image-20201015213413832

CodeFirst 通过命令使用模型生成数据库

再往下就是重点了,也不是很重点,就基本的仨命令(一条一条执行)

image-20201015213820982

image-20201015214150835

image-20201015214240679

值得注意的是这里的默认项目和启动项目都要一致而且都是API项目(StartUp所在的项目)

image-20201015214724075

如果执行命令的过程中发生错误,请查看项目有没有安装所需的依赖包或者复制错误信息自行搜索

项目搭建好之后就可以启动api项目进行测试了

image-20201016221613665


接下来再说说DBFirst

先执行sql,在你本地新建一个数据库

DBFirst,先在本地建好数据库,再通过命令行将已存在的数据库生成模型

新建一个Core 类库项目DBFirstCore

下载依赖包

执行以下命令即可

image-20201015220200713

值得注意的是,这回默认项目和启动项目都选当前的Core 类库项目

image-20201015221748654

项目结构,自动生成User类和context文件(手动将context文件的无参构造删了)

image-20201015220446969

新建一个Core API项目

下载依赖包

在startup文件的ConfigureServices方法中加入以下代码

新增UserController用于测试

项目结构

image-20201015221326567

新建一个Service项目,同样只贴出Userservice

项目结构:

image-20201015222039399

项目搭建好之后就可以启动api项目进行测试了

image-20201016222011240

值得一提

1.目前只有.Net framework和.Net Core可以链接数据库,.Net standard是不可以的。

image-20201015222347217

2.执行命令报错:Your startup project 'DBFirst' doesn't reference Microsoft.EntityFrameworkCore.Design

你没装 Microsoft.EntityFrameworkCore.Design

3.执行命令报错:Unable to connect to any of the specified MySQL hosts.

数据库连接字符串错了,或者不存在数据库

4.执行命令报错:Unable to create an object of type 'DataContext'

请把默认项目和启动项目改为startup所在的项目

5.执行命令报错:无法将“Scaffold-DbContext”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

你没装Microsoft.EntityFrameworkCore.Tools

其他

源码参考:https://github.com/logerlink/.NetCoreDBTest

源码拉取下来无法直接执行,仅作为本文参考。