Entity Framework Core 基础

上面的命令就会为SQL.Senverfdemol 数据库中的所有表生成实体类及上下文为,用所示的就是反向工程工具所生成的项目文件。

反向工程可以大大减少开发的工作量,但是由于所有的代码都是根据数据库生成的,因生成的实体类也许并不能满足项目的要求。以上面生成的实体类为例,所有的数据库表名为“T_实体类名称的复数形式”,而反向工程则是根据EF Core默认的规则生成“TCat”这样的类名,而不是“Cat”这样的类名。因此反向工程生成的代码可能需要手动修改,而且我们也要对应地为其增加Fluent API或者Data Annotation的配置。

需要特别注意的是,如果我们再次运行反向工程工具,对生成文件所做的任何更改都将丢失,因此,如果我们已经对之前生成的代码做了修改,那么再次运行反向工程的时候要谨慎。

有部分开发人员,把反向工程工具当成日常开发工具使用,也就是项目开发的时候,一直手动维护数据库表结构,包括新增表、新增列的操作都是直接在数据库上进行的,然后使用反向工程工具生成实体类的代码。这种方式是不推荐的,因为这不符合“模型驱动”的开发理念变成了传统的“数据库驱动”的开发方式,这对复杂项目的管理是一个“前期很方便,后期越来越杂乱”的灾难。

查看EF Core生成的SQL语句

我们知道,程序都是要通过SQL语句与关系数据库进行交互的。在使用EF Core的时候,一般不需要再去编写SQL语句,这是因为EFCore会把C#代码转换成与SQL语句相关的操作.在日常开发中,只要编写C#代码对实体类进行操作就可以了,不需要时刻关注代码生成的SQL语句是什么样的。但是开发人员仍然有查看底层SQL语句的需求。比如在程序出现性能问题的时候,开发人员需要检查EF Core生成的SQL语句是否有性能缺陷;比如在程序出现bug的时候,开发人员需要检查EF Core生成的SQL语句是否和自己预期的一致。本节会介绍查看EF Core生成的SQL语句的方式。

使用简单日志查看SQL语句

在EF Core5.0之前,我们需要使用标准的日志框架输出EF Core背后执行的SQL语句.而从EF Core 5.0开始,EFCore增加了一种“简单日志”,在不引入.NET的日志框架的情况下,

我们发现,上面的脚本中日列的数据类型是bigint类型,而且设置了列为Sqlserverldentity标识列.Name列的数据类型是中特有的概念,因此这些数据库迁移脚本并不能直接应用于MySQL.nvarchar类型.这里的bigint、nvarchar、标识列等都是SQLServerOracle等其他类型的数据库。如果一个项目需要同时面向多种类型的数据库进行开发,我们可以通过给Add-Migration命令添加“-OutpuDi”参数的形式来在同一个项目中为不同的数据库生成不同的迁移脚本,非且把迁移脚本保存到不同的文件夹下,具体用法可以参考微软官方文档的“使用多个提供程序进行迁移”这一节。本小节为了简化问题,会在不同的项目中创建连接不同类型数据库的代码。

本小节中,我们会复用之前演示过的Book实体类的例子,因为面向不同数据库的不同项目的Book实体类以及配置类BookEintityConfig的代码都是一样的,所以这里不再重复相关的代码。用于测试的查询代码如下边所示。

  • 用于测试的查询代码

 var books =ctx.Books.Nhere(b->b.PubTime.Year>2010).Take(3);
 foreach(var b in books)
{
 Console.NriteLine(b.Title);
}

在SQL Sever数据库中执行上面的代码,程序生成的SQL语句如下:

SELECT TOP(3) [t].[Id],[t].[AuthorName],[t].[Price],[t].[PubTime],[t].[Title]FROM [T_Books] AS [t] WHERE DATEPART(year, [t].[PubTime])> 2010

接下来,我们创建使用MySQL数据库的项目。

MySQL的EF Core数据库提供程序有MySql.EntityFrameworkCore(以下简称“官方库”)、Pomelo.EntityFrameworkCore.MySql(以下简称“Pomelo”)这两个NuGet包。第一个是由MySQL官方开发和维护的,不是开源的;第二个是由Pomelo Foundation开源团队开发的,是开源的。官方库曾经更新速度非常慢,经常是EFCore升级后几个月内官方库都没有跟随更新,导致在EF Core 中使用MySQL时无法及时利用EF Core的新特性。而且由于官方库不是开源的,因此社区的开发人员无法参与到代码的改进中。而Pomelo随EF Core新版本更新的速度非常快,而且由于它是开源的,开发人员可以群策群力地推动项目的进步。正因为如此,Pomelo 比官方库更受开发人员欢迎,在作者写书的这一刻,Pomelo的下载量约是官方库的140倍。本书也采用Pomelo操作 MySQL.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值