为什么建议使用Guid结构体做为数据库及排序时的主键
在.net2.0中,Guid结构体表示一个全局唯一标识符,是一个在生成时就可以肯定为全世界唯一的16字节值。Guid在数据库中通常可以作为各种排序的主键。其实一般情况下直接int也可以,但使用Guid可以在将来更换或迁移数据库时不需要进行一些其它操作以确保ID的唯一性。比如
public class Company
{
public Guid id { get; set; }
......
}
其中Guid可以表示值范围总共有2128或者3.4x1018个值。
可以调用静态的Guid.newGuid方法创件一个新的唯一的Guid;
在vs code里直接dotnet new console -n test创建控制台项目,写入测试代码:
using System;
using static System.Guid;
using static System.Console;
namespace test
{
class Program
{
static void Main(string[] args)
{
Guid newGuid1 = Guid.NewGuid();
WriteLine(newGuid1.ToString());
}
}
}
然后在powershell里cd test,进行dotnet build及dotnet run;
PS C:\Users\huang\source\repos\数据结构\Guid> dotnet build
用于 .NET Core 的 Microsoft (R) 生成引擎版本 16.4.+e901037fe
版权所有(C) Microsoft Corporation。保留所有权利。 C:\Users\huang\source\repos\数据结构\Guid\Guid.csproj 的还原在 35.37 ms 内完成。
Guid -> C:\Users\huang\source\repos\数据结构\Guid\bin\Debug\netcoreapp3.\Guid.dll 已成功生成。
个警告
个错误 已用时间 ::01.10
PS C:\Users\huang\source\repos\数据结构\Guid> dotnet run
664a92a8-70cd-46ec-b8e5-f7aba10d6127
PS C:\Users\huang\source\repos\数据结构\Guid>
可看到生成了一个16字节值。
当然,也可以直接使用构造器实例化一个现有的Guid,比如
class Guid1{
int _x;
public Guid(int x) { _x = x; }
}
}
当以字符串形式出现时,Guid是一个由32个16进制数字表示。
Guid newGuid2 = Guid.NewGuid("664a92a8-70cd-46ec-b8e5-f7aba10d6127");
Guid是一个结构体,支持值类型的语义,Guid有一个ToByteArray方法可以将其转换为一个字节数组,其中Guid.Empty静态属性可以返回一个空的Guid,通常用来表示null。
为什么建议使用Guid结构体做为数据库及排序时的主键的更多相关文章
- go语言基础之结构体做函数参数 值传递和地址传递
1.结构体做函数参数值传递 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct { ...
- 深入理解C语言-结构体做函数参数
结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址 结构体定义 struct Man { char name[64]; int age; }; 结构体可以与 ...
- map中结构体做关键字的注意事项
序: 今天做一道题,由于递归函数比较恶心,如果用记忆化搜索,数据范围极大却又用不全(二维数组存的话直接炸).所以决定干脆使用stl::map存储(反正有O2优化),但是执行insert的时候,编译器却 ...
- C语言-对一个结构体中的字段进行排序
这是帮别人做的一个题目,好久没有接触过C语言了.有点发怵,只是似乎找回点当时学C语言,做课程设计的感觉. 题目:定义一个数组(学生结构体数组),里面包括学号.姓名.身份证和三科学生成绩.要求写一个函数 ...
- Java的 「 “ 结构体 ”」 与 「 “ 自定义排序 ” 」
Java里面的结构体可以靠class来实现,如果相对结构体进行排序,需要写一个接口,class 自定义的名字 implements Comparator<结构体(自己定义的class类的名字)& ...
- C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合
#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{// ...
- SQLServer2005,2000获取表结构:字段名、类型、长度、主键、非空、注释
SQLServer 2005 SELECT d.name N'TableName', d.xtype N'TableType', a.colorder N'ColumnIndex', a.name N ...
- C++中的结构体的认识
C++中的结构体的认识 1. typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间. 实例像:typedef ...
- C++学习笔记(六)--结构体
1.一种自定义的类型--结构体定义: struct 结构体名称 { //成员表列也称作域 还可以包括函数,即函数成员,不过一般结构体类型中不包含,而是放在类中. 类型名 成员名; };这种结构体类型类 ...
随机推荐
- $CF888G\ Xor-MST$ 最小生成树
正解:最小生成树 解题报告: 传送门$QwQ$ 发现$Kruskal$和$Prime$都不太可做,于是考虑$B$算法. 先大概港下$B$算法的流程趴$QwQ$.大概就,每次对每个联通块找到最近的联通块 ...
- $Poj3179\ Corral\ the\ Cows$ 二分+离散化+二维前缀和
Poj $Description$ 在一个二维平面上,有$N$颗草,每颗草的大小是$1*1$,左下角坐标为$x_i,y_i$.要求一个正方形,正方形的边平行于$x$或$y$轴,正方形里面包含至少$C$ ...
- 探索 模块打包 exports和require 与 export和import 的用法和区别
菜单快捷导航: CommonJS 之 exports和require用法 ES6 Module 之 export 和 import 用法 CommonJS和ES6 Module的区别 循环依赖 和 解 ...
- 一文详解滑动平均法、滑动平均模型法(Moving average,MA)
任何关于算法.编程.AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI.算法.编程和大数据知识分享,以及免费的SSR节点和 ...
- SimpleFactoryPattern(简单工厂模式)-----Java/.Net
工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...
- 机器学习之路--Numpy
常用代码 ndarray.dtype 数据类型必须是一样的 常用代码 import numpy #numpy读取文件 world_alcohol = numpy.genfromtxt("wo ...
- 「UVA1328」「POJ1961」 Period 解题报告
UVA1328 Period 其他链接:luogu UVA1328 POJ1961 For each prefix of a given string S with N characters (eac ...
- 小小知识点(五十一)——6G扬帆起航:拍赫兹通信与健康泛在网络助推6G新应用
转自IEEE科技纵览 https://weibo.com/ttarticle/p/show?id=2309404454066502631625 6G扬帆起航:拍赫兹通信与健康泛在网络助推6G新应用 ...
- (二)Django模板的应用
一.配置项目的基础模板,分三部分 base.html 基础部分,需要包括基本的HTML标签 header部分 body部分 html闭合标签 {% load staticfiles %} <!D ...
- bootstrap:导航分页
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...