请选择 进入手机版 | 继续访问电脑版

.NET Core学习笔记(8)——Entity Framework Core之Database Fi

[复制链接]
菜鸡 发表于 2021-1-1 18:33:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
曾经我以为再也不会去弄啥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库创建一张测试用的表。

  1. 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命令。
  1. 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是必不可少的……

  1. 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比较擅长才对。
 
 
钻石手表的品鉴与保养
珠宝腕表品牌
瑞士手表如何选择

来源:https://blog.csdn.net/tuoyi123/article/details/112028523
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )