参考

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. saltStack自动化工具

    目录 SaltStack自动化工具 核心概念 1. Master 和 Minion 2. State 3. Pillar 4. Grains 5. Modules 6. Runner 7. React ...

  2. 写了一个json小工具,希望大家体验(Mac平台)

    用rust写了一个json小工具"JSON PICKER",欢迎大家试用: https://github.com/davelet/json-picker/releases/tag/ ...

  3. ABC357-C题解

    最近一直掉分,谔谔. 分析 发现机房里面除了我以外都用递归写的,那我就来讲一种非递归的吧. 考虑第 \(i\) 级地毯拆成九块以后其实就是八块第 \(i-1\) 级地毯与一块大小为 \(3^{i-1} ...

  4. ASP.NET Core 程序集注入(一)

    1.创建[特性]用于标注依赖注入 using Microsoft.Extensions.DependencyInjection; using System; using System.Collecti ...

  5. MySQL 纵表转横表查询实现

    纵表转横表查询实现 By:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 实践环境 MySQL 5.7 创建测试表 CREATE TABLE tb_test ( id I ...

  6. 推荐几款.NET开源且功能强大的实用工具,助你提高工作开发效率!

    前言 俗话说得好"工欲善其事,必先利其器",今天大姚给大家推荐8款.NET开源且功能强大的实用工具,助你提高工作开发效率! DevToys 一款基于C#开源(MIT License ...

  7. 蓝图中如何存储树结构: NPC对话的打开方式

    BFS来扩展成数组, 然后每一个node节点的child存储为索引.

  8. 2023/4/18 SCRUM个人博客

    1.我昨天的任务 初步学习dlib的安装,了解dlib的基础组件 2.遇到了什么困难 对pandas库了解不到位,需要学习其中的基础 3.我今天的任务 初步了解了pandas库,对series和dat ...

  9. scratch打乒乓球源码免费下载

    点击下载

  10. 【H5】14 表单 其三 原生表单部件

    现在,我们将详细研究不同表单部件的功能,查看了哪些选项可用于收集不同类型的数据.这个指南有些详尽,涵盖了所有可用的原生表单小部件. 预备知识: 计算机基础知识和对于HTML的基本理解. 目标: 要了解 ...