为什么建议使用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 结构体名称 { //成员表列也称作域 还可以包括函数,即函数成员,不过一般结构体类型中不包含,而是放在类中. 类型名 成员名; };这种结构体类型类 ...
随机推荐
- Java工作流系统-父子流程的配置讲解
父子流程 关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统 适配数据库: oralce,mysql ...
- 高德API对接
<?php class GaoDeAPI { private $key = '123456789'; # 你应用key /** * 地址转经纬度 */ public function getTr ...
- 小技巧(2) 查询自己博客的SEO(如果违规,请先提醒)
今天,教大家查看自己博客的SEO. 首先,上网站http://seo.chinaz.com/ 接着,在网页输入框中输入自己博客地址(带后面路径,不是cnblogs.com这样的,类似https://w ...
- 小白学Java:老师!泛型我懂了!
目录 小白学Java:老师!泛型我懂了! 泛型概述 定义泛型 泛型类的定义 泛型方法的定义 类型变量的限定 原生类型与向后兼容 通配泛型 非受限通配 受限通配 下限通配 泛型的擦除和限制 类型擦除 类 ...
- GoCenter助力Golang全速前进
一.背景 Go语言是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.为了方便搜索和识别,有时会将其称为Golang.自2009年11月Google正式宣布推出,成为开放 ...
- 灵魂画师,在线科普多云平台/CMP云管平台/中间件/虚拟化/容器是个啥
原创: 灵魂工作室 速石科技 经常碰到有人问: 你们是云管吗? 你们和CMP多云管理平台有什么区别? 你们这个多云平台到底是个啥? emmmmm,问题还挺不好回答. 为了说清楚这些问题,但又不希望你们 ...
- JS的var和let的区别(详细讲解)
let是ES6新增的,它主要是弥补var的缺陷,你也可以把let看做var的升级版.下面我就来详细讲讲var和let的区别 相同点: var和let都有函数级作用域 不同点: (1)var是全局作用域 ...
- 通过核心API启动单个或多个scrapy爬虫
1. 可以使用API从脚本运行Scrapy,而不是运行Scrapy的典型方法scrapy crawl:Scrapy是基于Twisted异步网络库构建的,因此需要在Twisted容器内运行它,可以通过两 ...
- JAVA大数贪心
题意:01给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n,并且要使得这m个数的或值最小. 思路分析: 一个简单的贪心,从高位到低位,判断当前位可否为 1 ,若可以,则将所有的数的这一位 ...
- JMeter——jmx脚本文件解析
<!--Jmeter版本信息--> <?xml version="1.0" encoding="UTF-8"?> <jmeterT ...