参考

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. R语言将多景遥感影像拼接在一起的方法

      本文介绍基于R语言中的raster包,遍历文件夹,读取文件夹下的大量栅格遥感影像,并逐一对每一景栅格图像加以拼接.融合,使得全部栅格遥感影像拼接为完整的一景图像的方法.   其中,本文是用R语言来 ...

  2. PHP str_replace() 函数详解

    PHP str_replace() 函数详解 1.前言: str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写). 该函数区分大小写.请使用 str_ireplace() 函数 ...

  3. Git 清除缓存账密

    [已解决] git push 报错:git: 'credential-manager' is not a git command. See 'git --help'. 解决方案1)运行 git con ...

  4. 基于Java+SpringBoot+Vue宠物咖啡馆平台设计和实现

    \n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 系统介绍: 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成 ...

  5. oeasy 教您玩转linux 之 010209 装酷利器 hollywood

    我们来回顾一下 上一部分我们都讲了什么? 屏幕故障风格的软件包bb 可以设置音频 这次装一个酷 下个hollywood软件包 apt show hollywood apt search hollywo ...

  6. [oeasy]python0072_自定义小动物变色_cowsay_color_boxes_asciiart

    修改颜色 回忆上次内容 上次搞的是 颜色 前景颜色 总共有 7 种基本色 还有什么 好玩的 么? 可以 给小动物 上色 吗? 配合 先将cowsay结果 输出重定向 sudo apt install ...

  7. Java基础 韩顺平老师的 集合 的部分笔记

    498,集合介绍 499,集合体系图(两个图背下) package com.hspedu.collection; import java.util.ArrayList; import java.uti ...

  8. 第十二节 JMeter基础-中级地址信息【IF控制器】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:提交订单前,我们需要核对一些信息,比如商品信息,收货地址,支付方式等.现在核对一下收货地址信息. 思路: 1.前提条件 ...

  9. nacos:关于注册服务与配置管理

    为什么要用nacos做配置中心? 1.nacos可以做到统一管理,而且在修改时可以做到动态管理,无需重启即可生效. 2.nacos通过namespace进行环境隔离, 约定: namespace:用于 ...

  10. vue中的<script setup>与<script>

    <script setup>是在vue3.2之后新增的语法糖,简化了API的写法 1.声明的变量无需return,可以直接在模板中使用,实现了顶层的绑定 2.引入组件会自动注册,无需再使用 ...