EFCore 新增 EF.Function
在EFCore 2.0开始,在使用时增加了 EF.Function
方法,此方法对应数据库中的函数,在.Net5中会大次推广
比较通用的是 Like
方法:
例子:
using Microsoft.EntityFrameworkCore;
public void GetUserinfo()
{
_dbContext.UserInfos.Where(c => EF.Functions.Like(c.UserName, "%风%")).ToList();
}
其他使用方式目前未使用过,以后可以尝试:
基本是一些时间函数,与数据库中常用的函数功能相同
例子:
using Microsoft.EntityFrameworkCore;
EF.Functions.Contains();
EF.Functions.DateDiffDay();
EF.Functions.DateDiffHour();
EF.Functions.DateDiffMinute();
EF.Functions.DateDiffMonth();
EF.Functions.DateDiffSecond();
EF.Functions.DateDiffYear();
EF.Functions.IsDate();
Entity Framework 特性:
- 跨平台: EF Core 是一个跨平台的框架,它可以运行在 Windows,Linux和 Mac上。
- 建模: EF (Entity Framework) 创建一个基于 POCO (Plain Old CLR Object) 实体的 EDM (Entity Data Model),POCO实体含有不同数据类型的get/set 属性 (properties)。EF 在查询和保存实体数据到底层数据库的时候会使用 EDM 模型。
- 查询: EF 允许我们使用 LINQ 查询(C#/VB.NET)从底层数据库检索数据。数据库提供器将 LINQ 查询转换成特定数据库的查询语言(例如:关系型数据库的SQL).EF也允许我们执行原生的SQL查询来查询数据库。
- 改变跟踪: 实体实例中 (Property values) 中发生的需要被提交到数据库的任意改变将被 EF 持续跟踪。
- 保存: 当你调用
SaveChanges()
方法时,EF会根据你的实体的改变执行INSERT, UPDATE, 和DELETE命令。EF也提供异步方法SaveChangesAsync()
。 - 并发: 当其他用户从数据库获取数据后要重写数据时,EF默认采用乐观并发(
Optimistic Concurrency
)。 - 事务: 当查询和保存数据时,EF执行自动事物管理。EF也提供了定制事务管理的选项。
- 缓存: EF包含开箱即用的第一级缓存。所以,重复查询将会返回缓存中的数据,而不是再次访问数据库。
- 内置约定: EF遵循约定高于配置的编程模式,并且包含了一组默认规则用来自动配置EF模型。
- 配置: EF允许我们使用数据注释特性或者 Fluent API 来重写默认的约定。
- 迁移: EF提供了一组迁移命令,可以在
NuGet Package Manager Console
或者Command Line Interface
中创建和管理底层数据库架构。
生成数据库命令
//初始化EF(仅执行一次即可)
Install-Package EntityFramework
//生成更新操作文件
EntityFrameworkCore\Add-Migration 后面直接加上备注
//在执行add-Migration发生错误时使用,可以撤回生成cs文件
EntityFrameworkCore\Remove-Migration
//更新至数据库
EntityFrameworkCore\update-database
生成数据库的注意事项:
在c#中int
类型为不可空类型,在数据库中可以为空,为实现此效果,需要在模型中增加前缀。例子:
public Nullable NaturalYear { get; set; } //**增加此参数可实现,“非必填”从而实现可空