EF Core – 8.0 new features
参考
Docs – What's New in EF Core 8
Support DateOnly and TimeOnly
SQL Server 早在 2008 年就已经支持 date 和 time 类型了。反观 .NET 一直到 6.0 才支持 DateOnly 和 TimeOnly 类型。
而 EF Core 更是直到 2023 年 8.0 版本才支持。
不需要任何配置,直接用就可以了
public class Person
{
public int Id { get; set; }
public DateOnly StartDate { get; set; }
public TimeOnly TimeOfDay { get; set; }
}
SQL
Program.cs
var app = builder.Build();
using var scope = app.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
var person = new Person
{
Name = "Derrick",
StartDate = new DateOnly(2023, 1, 1),
TimeOfDay = new TimeOnly(16, 50)
};
db.People.Add(person);
db.SaveChanges();
var person1 = db.People.FirstOrDefault(e => e.StartDate == new DateOnly(2023, 1, 1));
语句
.NET 6.0 & 7.0 Polyfill
6.0,7.0 如果也想使用 DateOnly 和 TimeOnly 可以使用 Polyfill。Github – ErikEJ / EFCore.SqlServer.DateOnlyTimeOnly
安装
在 Program.cs config SQL Server 时多加一句
这样就可以了。8.0 后就把这些 remove 掉,就可以了。
OData
odata v8.0.7 就支持 DateOnly 和 TimeOnly 了。所以一早就可以搭配 EF Core Polyfill 使用了哦
注: query 的 value 不需要 quote 哦
是 eq 2023-01-01 而不是 eq '2023-01-01',不要搞错哦
response
Complex Types
看这篇 EF Core – Owned Entity Types & Complex Types
Primitive Collection Properties
终于支持了
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = "";
public List<string> Categories { get; set; } = [];
}
直接写 List<string> 不需要任何 config,EF Core 会自动把它映射成 JSON Column。
create Product and query Product
using var db = new ApplicationDbContext();
db.Products.Add(new()
{
Name = "iPhone4",
Categories = ["i-Series", "Apple Products", "2024 Hot Products"]
});
db.SaveChanges();
var products = db.Products.Where(e => e.Categories.Any(category => category.StartsWith("Apple"))).ToList();
效果
不考虑性能问题的话,基本上完成的非常好了。
Supported types
不是只有值类型才支持哦,下面这些都可以
比如 DateOnly,TimeOnly,DateTimeOffset 这些对象也都可以。
另外,Complex Types 或 Owned Entity Types 里也都可以使用。
提醒:enum 映射到数据库是 number 哦。
Config MaxLength and Unicode
默认情况下 column 是 nvarchar(MAX)
如果想优化一点点性能可以设置 MaxLength 和 Unicode
modelBuilder
.Entity<Product>()
.Property(e => e.Categories)
.HasMaxLength(1024)
.IsUnicode(false);
这样就会变成 varchar(1024)。
要批量设置也行,去 ConfigureConventions
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder
.Properties<List<string>>()
.AreUnicode(false)
.HaveMaxLength(256);
}
Limitation
目前只能映射到同一个 Table 然后是 JSON Column,以后或许可以映射成 one-to-many,这样性能会更好,相关 Github Issue – Add support for collections of primitive types as separate table in relational databases。
EF Core – 8.0 new features的更多相关文章
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
ASP.NET Boilerplate 学习 1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...
- EF Core 1.0 和 SQLServer 2008 分页的问题
EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- EF Core 1.0中使用Include的小技巧
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于EF Core暂时不支持Lazy Loading,所以利用Include来加载额外 ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- EF Core 2.0 新特性
前言 目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明. 注意:如果你要在Visual Studio 中使用 .NET Core 2 ...
- EF Core 2.0使用MsSql/Mysql实现DB First和Code First
参考地址 EF官网 ASP.NET Core MVC 和 EF Core - 教程系列 环境 Visual Studio 2017 最新版本的.NET Core 2.0 SDK 最新版本的 Windo ...
- EF Core 2.0中如何手动映射数据库的视图为实体
由于Scaffold-DbContext指令目前还不支持自动映射数据库中的视图为实体,所以当我们想使用EF Core来读取数据库视图数据的时候,我们需要手动去做映射,本文介绍如何在EF Core中手动 ...
- Many-to-many relationships in EF Core 2.0 – Part 1: The basics
转载这个系列的文章,主要是因为EF Core 2.0在映射数据库的多对多关系时,并不像老的EntityFramework那样有原生的方法进行支持,希望微软在以后EF Core的版本中加入原生支持多对多 ...
- EF Core 3.0 Preview 9 的2个小坑
之前我们的数据库服务器使用的是 SQL Server 2008 R2 ,由于从 EF Core 3.0 Preview 6 开始不支持 UseRowNumberForPaging ,只能停留在 EF ...
随机推荐
- saltStack自动化工具
目录 SaltStack自动化工具 核心概念 1. Master 和 Minion 2. State 3. Pillar 4. Grains 5. Modules 6. Runner 7. React ...
- 写了一个json小工具,希望大家体验(Mac平台)
用rust写了一个json小工具"JSON PICKER",欢迎大家试用: https://github.com/davelet/json-picker/releases/tag/ ...
- ABC357-C题解
最近一直掉分,谔谔. 分析 发现机房里面除了我以外都用递归写的,那我就来讲一种非递归的吧. 考虑第 \(i\) 级地毯拆成九块以后其实就是八块第 \(i-1\) 级地毯与一块大小为 \(3^{i-1} ...
- ASP.NET Core 程序集注入(一)
1.创建[特性]用于标注依赖注入 using Microsoft.Extensions.DependencyInjection; using System; using System.Collecti ...
- MySQL 纵表转横表查询实现
纵表转横表查询实现 By:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 实践环境 MySQL 5.7 创建测试表 CREATE TABLE tb_test ( id I ...
- 推荐几款.NET开源且功能强大的实用工具,助你提高工作开发效率!
前言 俗话说得好"工欲善其事,必先利其器",今天大姚给大家推荐8款.NET开源且功能强大的实用工具,助你提高工作开发效率! DevToys 一款基于C#开源(MIT License ...
- 蓝图中如何存储树结构: NPC对话的打开方式
BFS来扩展成数组, 然后每一个node节点的child存储为索引.
- 2023/4/18 SCRUM个人博客
1.我昨天的任务 初步学习dlib的安装,了解dlib的基础组件 2.遇到了什么困难 对pandas库了解不到位,需要学习其中的基础 3.我今天的任务 初步了解了pandas库,对series和dat ...
- scratch打乒乓球源码免费下载
点击下载
- 【H5】14 表单 其三 原生表单部件
现在,我们将详细研究不同表单部件的功能,查看了哪些选项可用于收集不同类型的数据.这个指南有些详尽,涵盖了所有可用的原生表单小部件. 预备知识: 计算机基础知识和对于HTML的基本理解. 目标: 要了解 ...