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 ...
随机推荐
- [oeasy]python0070_动态类型_静态类型_编译_运行_匈牙利命名法
动态类型_静态类型 回忆上次内容 上次了解了 帮助文档的 生成 开头的三引号注释 可以生成 帮助文档 文档 可以写成网页 python3 本身 也有 在线的帮助手册 目前的程序 提高了 可 ...
- [oeasy]python0118_语言的发展_希腊字符_拼音文字_亚历山大大帝
希腊字符回忆上次内容 尼罗河流域 的 埃及圣书体 是象形文字 两河流域 的 苏美尔楔形文字 不是象形文字 做生意的 腓尼基人 利用 埃及圣书体 的 字型 苏美尔楔形文字 的 写法 构造出 腓尼基字符 ...
- Python 标准类库-因特网数据处理之Base64数据编码
该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能.它为RFC 3548中指定的编码提供编码和解码功能.定义了Base16.Base32和Base64算法,以及事实上的 ...
- TypeScript快速上手
TypeScript快速上手 参考TypeScript零基础入门 轻松搞定ts进行整理 TS文档:TypeScript: The starting point for learning TypeScr ...
- 【干货】流量录制回放工具:jvm-sandbox-repeater
在软件开发和测试过程中,我们经常会遇到需要对网络请求进行录制和回放的需求,以便进行调试.测试和分析.为了模拟真实的用户请求,我们通常会使用各种流量录制回放工具来记录并重放网络请求. 其中,jvm-sa ...
- java17特性:文本块
例子 String content= """ { "text_1":"%s", "text_2":" ...
- 假期小结8XML之LXML
这桌我初步学习了爬虫相关知识的python库LXML的一些基本用法 以下是我的部分总结 lxml是Python中一个流行的第三方库,用于处理XML和HTML数据.它提供了高效且易于使用的工具,使你能够 ...
- python面向对象游戏练习:好人坏人手枪手榴弹
python面向对象游戏练习:好人坏人手枪手榴弹 主要是多态的练习,对象作为参数传给方法使用 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 ...
- find命令在根目录查找文件
find命令在根目录查找文件 find命令口诀是: find 路 名 含 一,首先看看路径的表示方法 . 表示当前目录 .. 表示上一级目录 cd .. 表示返回上一级目录cd ../ ...
- Jmeter调试取样器
调试取样器(Debug Sampler),生成一个包含JMeter变量或属性值的样本,并且这些值可以在组件[查看结果树]的响应窗格中看到 组件路径:线程组->右键添加->取样器->D ...