首页 > 其他分享 >跟着杨中科学习(四)EFCore(二)

跟着杨中科学习(四)EFCore(二)

时间:2024-06-07 17:37:07浏览次数:21  
标签:r1 数据库 主键 中科 EFCore Guid Id 跟着

主键

自增主键

  • 自动增长。优点:简单;缺点:数据库迁移以及分布式
    系统中比较麻烦;并发性能差。long、int等类型主键,默
    认是自增。因为是数据库生成的值,所以SaveChanges后
    会自动把主键的值更新到Id属性。试验一下。场景:插入
    帖子后,自动重定向帖子地址。
  • 自增字段的代码中不能为Id赋值,必须保持默认值0,
    否则运行的时候就会报错。

Guid主键

  • Guid算法(或UUID算法)生成一个全局唯一的Id。适合于分布式
    系统,在进行多数据库数据合并的时候很简单。优点:简单,高并发,
    全局唯一;缺点:磁盘空间占用大。
  • Guid值不连续。使用Guid类型做主键的时候,不能把主键设置为
    聚集索引。因为聚集索引是按照顺序保存主键的,因此用Guid做主键性能差。比如MySQL的InnoDB引擎中主键是强制使用聚集索引的。
  • 有的数据库支持部分的连续Guid,比如SQLServer中的
    NewSequentialId(),但也不能解决问题。在SQLServer等中,不要
    把Guid主键设置为聚集索引;在MySQL中,插入频繁的表不要用
    Guid做主键。
  • 演示Guid用法:既可以让EF Core给赋值,也可以手动赋值(推
    荐)。
0 个引用
class Rabbit
{
    public Guid Id {get; set;}//主键
    
    public string Name {get; set;}//标题
}


    Rabbit r1 = new Rabbit();
    r1. Id= Guid. NewGuid() ;
    r1.Name= "yzk";
    Console. WriteLine(r1. Id) ;
    ctx. Rabbits. Add(r1) ;
    Console. WriteLine(r1. Id) ;
    await ctx. SaveChangesAsync();
    Console. WriteLine(r1. Id) ;

其他方案

  • 混合自增和Guid(非复合主键)。用自增列做物理的主键,而用
    Guid列做逻辑上的主键。把自增列设置为表的主键,而在业务上查询数据时候把Guid当主键用。在和其他表关联以及和外部系统通讯的时候(比如前端显示数据的标识的时候)都是使用Guid列。不仅保证了性能,而且利用了Guid的优点,而且减轻了主键自增性导致主键值可被预测带来的安全性问题。
  • Hi/Lo算法:EF Core支持Hi/Lo算法来优化自增列。主键值由两
    部分组成:高位(Hi)和低位(Lo),高位由数据库生成,两个高位之间间隔若干个值,由程序在本地生成低位,低位的值在本地自增生成。不同进程或者集群中不同服务器获取的Hi值不会重复,而本地进程计算的Lo则可以保证可以在本地高效率的生成主键值。但是HiLo算法不是EF Core的标准。

Migrations的深入了解

  • 使用迁移脚本,可以对当前连接的数据库执行编号更高
    的迁移,这个操作叫做“向上迁移”(Up),也可以执行
    把数据库回退到旧的迁移,这个操作叫“向下迁移”
    (Down)。
  • 除非有特殊需要,否则不要删除Migrations文件夹下
    的代码。

EFCore的随机迁移命令

  • Update-Database XXX
    把数据库回滚到XXX的状态,迁移脚本不动。
  • Remove-migration
    删除最后一次的迁移脚本
  • Script-Migration
    生成迁移SQL代码。
  • 可以生成版本D到版本F的SQL脚本:
    Script-Migration D F
  • 生成版本D到最新版本的SQL脚本:Script-Migration D

EFCore的反向工程

类似于DBFirst。

根据数据库表来反向生成实体类。

输入指令:

Scaffold-DbContext
'Server =.; Database=demo1;Trusted
Connection=True;MultipleActiveRes
ultSets=true'
Microsoft.EntityFrameworkCore.SqlS
erver

EFCore操作数据库

了解EFCore的底层原理:反射加泛型,底层还是ADO.NET Core

EFCore底层依然是ADO.NET

标签:r1,数据库,主键,中科,EFCore,Guid,Id,跟着
From: https://www.cnblogs.com/guan-tou6/p/18237579

相关文章

  • 计算机SCI期刊,中科院2区,IF=6.9,收稿范围非常广泛
    一、期刊名称JournalofKingSaudUniversity—ComputerandInformationSciences二、期刊简介概况期刊类型:SCI学科领域:计算机科学影响因子:6.9中科院分区:2区三、期刊征稿范围《沙特国王大学计算机与信息科学杂志》是一本国际性的参考期刊,涵盖了计算机基础及其实......
  • EFCore和EF6的使用和区别
    1、Sqlserver是微软的亲儿子,很少会报错,EF报错问题最多出现在Mysql。以下使用mysql为例子C#一般很形象,带Core的都是.NetCore平台的。所以在.NetFramework平台我们使用EF6,也就是EntityFramework6在.NetCore平台使用EFCore2、直接上代码(.Net6)internalclassProgram{......
  • 跟着GPT学设计模式之观察者模式
    你好,这里是codetrend专栏“跟着GPT学设计模式”。引言观察者模式(ObserverPattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,其依赖对象都能够收到通知并自动更新。观察者模式(ObserverDesignPattern)也被称为发布订阅模式(Publish-S......
  • 跟着杨中科学习(二)日志
    日志系统日志级别Trace<Debug<Information<Warning<Error<Critical输出到控制台NugetMicrosoft.Extensions.LoggingMicrosoft.Extensions.Logging.ConsoleDI注入services.AddLogging(logBuilder=>{ logBuilder.AddConsole();//可多个ProciderlogBuilder.SetMini......
  • 从零开始的.NET项目(一)配置EFCore
    目标框架:.net6.0操作系统:macos编译器:Rider内容:配置EFCore,使用CodeFrist创建mssql数据库,并存入种子数据数据库准备如果使用的是vs编译器的话,其实就不用准备数据库了,直接用vs自带的数据库,嘎嘎好使......
  • 跟着杨中科学习(一)
    .netLinq委托->lambda->LINQinti=5;整数类型的变量i指向数据5;委托是可以指向方法的类型。调用委托变量时执行的就是变量指向的方法。.net中定义了泛型委托Action(无返回值)和Func(有返回值),所以一般不用自定义委托类型。staticvoidf1(intz,intc){}//main函数in......
  • 机器人SCI期刊,中科院3区,专业性强,质量佳
    一、期刊名称AutonomousRobots二、期刊简介概况期刊类型:SCI学科领域:机器人影响因子:3.5中科院分区:3区三、期刊征稿范围自主机器人报告了能够在一定程度上自给自足的机器人系统的理论和应用。它的特色论文包括真实世界中实际机器人的性能数据。涵盖范围包括:·自......
  • 经济学SSCI期刊,中科院1区,领域内顶刊,影响力高
    一、期刊名称WorldDevelopment二、期刊简介概况期刊类型:SSCI学科领域:经济学影响因子:6.9中科院分区:1区三、期刊征稿范围《世界发展》是一本多学科的发展研究月刊。它力求探讨如何改善生活水平和一般人类状况,审查解决问题的可能解决办法。四、期刊表现......
  • 计算机SCI期刊,中科院3区,专业认可度高,收稿范围广泛
    一、期刊名称ComputersandElectricalEngineering二、期刊简介概况期刊类型:SCI学科领域:计算机科学影响因子:4.3中科院分区:3区三、期刊征稿范围计算机的影响在电气工程领域最具革命性。电气和电子系统的设计、分析和操作现在由计算机主导,这一转变的动机是计算机......
  • 【跟着例子学MySQL】学以致用 -- 综合练习
    文章目录前言回顾租赁系统数据库练习高级练习前言举例子,是最简单有效的学习方法。本系列文章以一个贯穿始终的场景,结合多个实例讲解MySQL的基本用法。❔为什么要写这个系列?模仿是最好的老师,实践是检验成果的方法。本系列以实操样例和应用场景为核心,将MySQL基本......