参考

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的更多相关文章

  1. 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.解压后打开解决方案,解决方案目录: ...

  2. EF Core 1.0 和 SQLServer 2008 分页的问题

    EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...

  3. 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 ...

  4. EF Core 1.0中使用Include的小技巧

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于EF Core暂时不支持Lazy Loading,所以利用Include来加载额外 ...

  5. .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 ...

  6. EF Core 2.0 新特性

    前言 目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明. 注意:如果你要在Visual Studio 中使用 .NET Core 2 ...

  7. 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 ...

  8. EF Core 2.0中如何手动映射数据库的视图为实体

    由于Scaffold-DbContext指令目前还不支持自动映射数据库中的视图为实体,所以当我们想使用EF Core来读取数据库视图数据的时候,我们需要手动去做映射,本文介绍如何在EF Core中手动 ...

  9. Many-to-many relationships in EF Core 2.0 – Part 1: The basics

    转载这个系列的文章,主要是因为EF Core 2.0在映射数据库的多对多关系时,并不像老的EntityFramework那样有原生的方法进行支持,希望微软在以后EF Core的版本中加入原生支持多对多 ...

  10. EF Core 3.0 Preview 9 的2个小坑

    之前我们的数据库服务器使用的是 SQL Server 2008 R2 ,由于从 EF Core 3.0 Preview 6 开始不支持 UseRowNumberForPaging ,只能停留在 EF ...

随机推荐

  1. 【原创软件】第2期:CAD文字快速批量替换工具CFR(CAD_FastReplace_V4)

    01 背景 由于工作需要,开发了一套CAD文字快速批量替换软件CFR.主要目的是:实现dwg文件一次性完成单对/多对词组快速批量替换. 02 主要功能特色 (1)无需打开CAD,快速实现文字批量替换. ...

  2. Django集成的密码找回功能

    要实现忘记密码功能,您需要进行以下修改: 添加忘记密码链接到登录页面. 创建密码丢失修改页面. 创建密码修改页面. 编写相应的视图函数来处理密码丢失修改和密码修改逻辑. 编写发送验证信息到邮箱的逻辑. ...

  3. oeasy教您玩转vim - 58 - # 块可视化

    ​ 块可视化编辑 回忆上节课内容 上次我们了解到行可视模式 行可视模式 V 也可配合各种motion o切换首尾 选区的开头和结尾是mark标记 开头是 '< 结尾是 '> 可以在选区内进 ...

  4. 信奥生(OIER)请看,包囊初赛复赛全真模拟赛!

    luogu 动态追踪! 唠唠嗑 感谢 tyw 代理团主对比赛的贡献,但是由于我和 tyw 的关系紧张,tyw 取消了我和她的一切合作.CTFPC-3rd 的出题.宣传工作都交到了我手上,我这次亚历山大 ...

  5. 【Java】SPI机制

    SPI全称: 服务供应商接口 Service Provider Interface 服务发现机制 入门概念视频来自于: https://www.bilibili.com/video/BV1E44y1N ...

  6. 【MybatisPlus】再补充内容

    2021年7月21日 14点05分 看尚硅谷新讲的尚医通,这个MP的文档多了新东西: 依赖版本: springBoot版本  2.2.1.RELEASE <dependencies> &l ...

  7. Continue-AI编程助手本地部署llama3.1+deepseek-coder-v2

    领先的开源人工智能代码助手.您可以连接任何模型和任何上下文,以在 IDE 内构建自定义自动完成和聊天体验 推荐以下开源模型: 聊天:llama3.1-8B 推理代码:deepseek-coder-v2 ...

  8. 英语词汇:simplistic和simple区别

    "Simplistic" 和 "simple" 都表示简单,但它们有不同的含义和语境: Simplistic: 含义: 过于简单化的,有贬义,表示忽略了复杂性或 ...

  9. 中国的AI领域发展的重大不足 —— 数据缺少,尤其是自然语言领域(NLP)、大模型领域

    全世界公开可用的语言文本中绝大部分是英文文本,其中中文文本只有1.5% 相关: China's Betting Big On Artificial Intelligence. Could The US ...

  10. 圆方树学习笔记 & 最短路 题解

    前言 圆方树学习笔记,从一道例题讲起. 题目链接:Hydro & bzoj. 题意简述 仙人掌上求两点距离. 题目分析 为了把仙人掌的性质发挥出来,考虑将其变成一棵树.圆方树就是这样转换的工具 ...