.NET Core学习笔记(8)——Entity Framework Core之Database First
曾经我以为再也不会去弄啥Database First,然鹅我错了。这个世界上就是有啪啪打脸和真香的时候。当小伙伴拿着做好的DB表结构和SQL脚本递过来的时候,我知道我没法拒绝。望着他突起的肱二头肌和充满杀意的脸庞,我怎能忍心说,来来来,我们Code First一把……
DB First嘛,首先我们要确保本地有DB才行,本篇我们使用免费的SQL Server LocalDB来举例。LocalDB可以从MSDN下载安装包,也可以直接通过Visual Studio安装。

安装完成后,我们使用Visual Studio来连接LocalDB(当然也可以下载更强大的SQL Sever Management Studio)。首先我们打开Visual Studio的View -> SQL Server Object Explorer。默认应该已经连接到LocalDB了,如果没有可以通过顶层节点右键菜单Add SQL Server来手动操作。

我们通过以下SQL语句在master库创建一张测试用的表。
CREATE TABLE [dbo].[Todoes] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Description] NVARCHAR (MAX) NULL,
[CreatedDate] DATETIME NOT NULL,
[Done] BIT DEFAULT ((0)) NOT NULL,
CONSTRAINT [PK_dbo.Todoes] PRIMARY KEY CLUSTERED ([ID] ASC)
);
至此我们的准备工作算是完成了。接下来我们要通过Entity Framework Core来对Todoes表做Object映射,生成C#的实体类。
首先在Visual Studio 2019中创建空的.NET Core的Console程序作为启动项,再建立一个.NET Standard的Library用以生成Entities Class以及DbContext对象(当然把这两个工程合并为一个也是可以的)。当前工程的结构如下:

接着我们添加Entity Framework Core的references,DataAccess作为数据访问层会使用到EntityFrameworkCore.SqlServer和EntityFrameworkCore.Tools这两个库。当然除了SqlServer,也可以替换成Sqlite等其他Provider。图中并没有升级到最新的5.0.1,这是因为我还在用.NET Core 3.1。如果开发实际项目的话,不妨等到.NET 5.x的LTS版本再全面切换过去。

在我们的Sample中,EfDatabaseFirst作为启动项,需要依赖EntityFrameworkCore.Design库。同时它还需要引用DataAccess工程。

References的添加到此也完成了,现在我们要通过Visual Studio的Package Manage Console窗口来生成实体类。这和.NET 4时代的体验稍有不同,不再有edmx文件了。我想现在大量的通过CLI来替代GUI,也是为了更好的跨平台,让使用Visual Studio Code的Linux小伙伴们有着一致的体验。就是苦了我这样喜欢点点点的懒人……
最后我们要在Package Manage Console中输入Scaffold-DbContext命令。
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=master;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
详细的语法请参考MSDN:Scaffold-DbContext

记得Default project要选DataAccess,否则Models文件夹会跑到EfDatabaseFirst工程里去了。在命令成功运行后,Solution Explorer的结构如下:

如果点开Todoes类,会看到下面的代码,和数据库的表结构做了完美的映射。假使我们的数据库已经设计了100张表,生成实体类也只是一瞬间的事情,如果人肉来做这件事情,996是必不可少的……
namespace DataAccess.Models
{
public partial class Todoes
{
public int Id { get; set; }
public string Description { get; set; }
public DateTime CreatedDate { get; set; }
public bool Done { get; set; }
}
}
本篇我们讨论了如何使用Entity Framework Core的Database First模式来创建实体类。并没有讨论如何使用实体类和DbContext对象。我想把这些留到下一篇Code First。毕竟Code First是更为主流,与Code结合也更为紧密。数据库这种事情,还是DBA比较擅长才对。
SampleCode:
https://github.com/manupstairs/EntityFrameworkCoreSamples
.NET Core学习笔记(8)——Entity Framework Core之Database First的更多相关文章
- ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6 将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0 将 ...
- [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...
- Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...
- ASP.NET Core 1.0: Using Entity Framework Core
伴随着ASP.NET Core 1.0发布的还有Entity Framework Core 1.0; 官方文档链接:https://docs.efproject.net/en/latest/platf ...
- [转]ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction
本文转自:http://blog.csdn.net/alvachien/article/details/51576961 跟Entity Framework之前的版本不同,Class DbContex ...
- ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction
跟Entity Framework之前的版本不同,Class DbContext不再有AcceptAllChanges()方法. 使用Transaction需要使用DbContext中的Databas ...
- 请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?
using dotNET.Core; using Microsoft.Extensions.Logging; using System; using System.Collections.Generi ...
- Entity Framework Core 练习参考
项目地址:https://gitee.com/dhclly/IceDog.EFCore 项目介绍 对 Microsoft EntityFramework Core 框架的练习测试 参考文档教程 官方文 ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- .NET CORE学习笔记系列(2)——依赖注入[8]: .NET Core DI框架[服务消费]
原文:https://www.cnblogs.com/artech/p/net-core-di-08.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的I ...
随机推荐
- 0001_20190327_使用frp搭建内网穿透
1. 环境 a) 公网服务器为阿里云的ECS Windows 2008 R2服务器, 有公网IP地址; 这个作为frp的服务器 b) 内网是开发服务器, Cento ...
- cf div2 round 688 题解
爆零了,自闭了 小张做项目入职字节 小李ak wf入职ms 我比赛爆零月薪3k 我们都有光明的前途 好吧,这场感觉有一点难了,昨天差点卡死在B上,要不受O爷出手相救我就boom zero了 第一题,看 ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...
- Shell命令和流程控制[linux常用命令的使用]
在shell脚本中使用三类命令: unix命令 概念:管道.重定向.backtick 流程控制 1 unix命令 echo "some text":在屏幕上输出信息 ls:文件列表 ...
- 大数据技术体系 && NoSQL数据库的基本原理
1.NoSQL产生的原因 目前关系型数据库难以应对日益增多的海量数据,横向的分布式扩展能力比较弱,因此构建出非关系型数据库(所谓的NoSQL),其目的是为了构建一种结构简单.分布式.易扩展.效率高且使 ...
- 实验吧 Forms
0x1考察知识 html中value的作用 按钮中用的value 指的是 按钮上要显示的文本 比如'确定,删除 等等字样' 复选框用的value 指的是 这个复选框的值 单选框用的value 和复选框 ...
- Day7 Scrum 冲刺博客
一.站立式会议1. 会议照片 2. 工作进度+燃尽图 团队成员 昨日完成工作 今日工作计划 遇到的困难 周梓波 添加键盘监听事件 由于游戏中计分规则不合理,进行重新设计 无 纪昂学 添加方块 ...
- CSS绘制正五角星原理(数学模型)
尽管网上有很多CSS绘制五角星的代码案例,但是对于初学者来说可以拿来移植使用,但是在不明白其原理的情况下,进行修改移植就比较困难了.譬如想要将五角星尺寸进行缩小或者放大等设计,就需要对原代码相关数据进 ...
- P4267 [USACO18FEB]Taming the Herd
说实话感觉不是一道蓝题--感觉挺水的,不过为了水题解,水题就够了(其实是觉得思考的过程比较典型,记录一下) 题解 刚开始看这道题感觉上没什么思路,但是我们可以先考虑用 \(O(n)\) 的时间去枚举发 ...
- 题解-[SDOI2017]数字表格
题解-[SDOI2017]数字表格 前置知识: 莫比乌斯反演</> [SDOI2017]数字表格 \(T\) 组测试数据,\(f_i\) 表示 \(\texttt{Fibonacci}\) ...