首页 > 其他分享 >Entity Framework Core 使用HiLo(高低位模式)生成主键

Entity Framework Core 使用HiLo(高低位模式)生成主键

时间:2024-03-01 11:13:40浏览次数:17  
标签:Core Name Menu Entity content Menus Add new 主键

Hi(高位):数据库生成,比如100、200、300

Lo(低位):本地生成,比如101、201、301

数据库给本地分配一个范围,范围用于主键的自增。

每次连接数据库的时候和当范围用完的时候都会从数据库中重新取出一个范围。

实体类:

[Table("T_Menu")]
public class Menu
{
    public int Id { get; set; }
    public string Name { get; set; }
}
// 实体类的配置类
public class MenuConfig : IEntityTypeConfiguration<Menu>
{
    public void Configure(EntityTypeBuilder<Menu> builder)
    {
        // 给Id列设置高低位默认
        // 在数据库中创建一个名为DBSequenceHiLo的序列
        builder.Property(p => p.Id).UseHiLo("DBSequenceHiLo");
        // 可以不设置序列名称
        builder.Property(p => p.Id).UseHiLo();
    }
}

DBContext类:

可以不用写这个,默认序列从1开始,每次范围有10个

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // 给指定的序列设置范围 StartsAt(起始编号) IncrementsBy(这个范围有几个编号)
    modelBuilder.HasSequence("DBSequenceHiLo").StartsAt(100).IncrementsBy(5);
    base.OnModelCreating(modelBuilder);
    // 从当前程序集加载所有的IEntityTypeConfigration
    modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}

使用:

content.Menus.Add(new Menu() { Name = "text1" });
content.Menus.Add(new Menu() { Name = "text2" });
content.Menus.Add(new Menu() { Name = "text3" });
await content.SaveChangesAsync();

content.Menus.Add(new Menu() { Name = "atext1" });
content.Menus.Add(new Menu() { Name = "atext2" });
content.Menus.Add(new Menu() { Name = "atext3" });
await content.SaveChangesAsync();

如果上面的代码和下面的代码分两次运行,则生成的Id分别是:

101,text1

102,text2

103,text3

105,atext1

106,atext2

107,atext3

标签:Core,Name,Menu,Entity,content,Menus,Add,new,主键
From: https://www.cnblogs.com/sunhouzi/p/18046532

相关文章

  • 界面控件Telerik UI for ASP. NET Core教程 - 如何为网格添加上下文菜单?
    TelerikUIforASP.NETCore是用于跨平台响应式Web和云开发的最完整的UI工具集,拥有超过60个由KendoUI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格,提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。上下文菜单允许开发者为应用程序的最终用户提供额外的......
  • Microsoft.AspNetCore.Http.Abstractions 2.20 is deprecated
    您想要升级 Microsoft.AspNetCore.Http.Abstractions 包,您需要注意以下几点:Microsoft.AspNetCore.Http.Abstractions 包在 ASP.NETCore2.2 版本后已经被标记为过时,因为它已经被包含在 Microsoft.AspNetCore.App 框架引用中12。因此,您不需要单独引用这个包,只需要在项目......
  • docker 部署.net core 3.1程序
    docker安装安装所需的软件包,yum-utils提供了yum-config-manager,并且devicemapper存储驱动程序需要device-mapper-persistent-data和lvm2。sudoyuminstall-yyum-utils\device-mapper-persistent-data\lvm2使用命令来设置docker仓库(阿里源,官方源太慢了)sudo......
  • ASP.NET Core MVC应用模型的构建[4]: Action的选择
    ControllerModel类型的Actions属性包含一组描述有效Action方法的ActionModel对象。对于定义在Controller类型中的所有方法,究竟哪些方法才能成为有效的Action方法呢?所以在正式介绍ActionModel类型之前,我们先来聊聊Action方法的选择规则。一、Action方法的选择二、ActionModel三、......
  • 基于Vue(提供Vue2/Vue3版本)和.Net Core前后端分离、强大、跨平台的快速开发框架
    前言今天大姚给大家推荐一款基于Vue(提供Vue2/Vue3版本)和.NetCore前后端分离、开源免费(MITLicense)、强大、跨平台的快速开发框架,并且框架内置代码生成器(解决重复性工作,提高开发效率),支持移动端(iOS/Android/H5/微信小程序):Vue.NetCore。提高开发生产效率、避免996可以考虑试试这......
  • coremark & dhrystone 移植要点
    目录移植coremark&dhrystone要点1.coremark1.1coremark计算方法1.2coremark移植方法2.dhrystone2.1dhrystone计算方式2.2dhrystone移植要点移植coremark&dhrystone要点1.coremark1.1coremark计算方法​ 计算的核心为下方的代码start_time();#if(MULTI......
  • 漫谈.net core和Autofac中的Scoped生命周期
      我们知道,.netcore内置了IOC容器,通常,一个服务的生命周期有三种:Transient、Scoped、Singleton  Transient:临时性的服务,当进行服务注入时,每次都是重新创建一个新的对象实例Scoped:范围性的服务,当在一个范围内进行服务注入时,保证使用同一个实例对象(可以理解为一个ISer......
  • ASP.NET Core MVC应用模型的构建[3]: Controller的收集
    从编程的角度来看,一个MVC应用是由一系列Controller类型构建而成的,所以对于一个代表应用模型的ApplicationModel对象来说,它的核心就是Controllers属性返回的一组ControllerModel对象,每个ControllerModel对象是应用模型针对Controller类型的描述。一、ControllerModel二、实例演示......
  • .Net core & C#
    1.VisualStudio安装时.net桌面开发和通用Windows平台开发的区别?在VisualStudio的安装选项中,“.NET桌面开发”与“通用Windows平台开发”指的是两种不同的应用程序开发框架。具体分析如下:.NET桌面开发:这个选项包括了用于开发传统的Win32桌面应用程序的组件,例如WindowsForms(......
  • 样本轮廓系数(原理、sklearn.metrics.silhouette_score、silhouette_samples参数介绍)
    https://blog.csdn.net/maple05/article/details/110454075?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170902662116800226570765%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170902662116800226570765&biz_id=0&am......