架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19853|回复: 1

[资料] EF设置主键Id为guid自增长类型

[复制链接]
发表于 2016-11-4 13:27:38 | 显示全部楼层 |阅读模式
QQ截图20161104131600.jpg

Entity实体代码如下:



插入代码如下:



我们只设置了name的值,并没有给id赋值,我们看一下生成的sql语句是什么???,如下:

exec sp_executesql N'DECLARE @generated_keys table([Id] uniqueidentifier)
INSERT [dbo].[TestTab]([Name])
OUTPUT inserted.[Id] INTO @generated_keys
VALUES (@0)
SELECT t.[Id]
FROM @generated_keys AS g JOIN [dbo].[TestTab] AS t ON g.[Id] = t.[Id]
WHERE @@ROWCOUNT > 0',N'@0 nvarchar(32)',@0=N'架构师 www.itsvse.com'


我们发现INSERT TestTab表,只插入了Name字段,难道Id有默认值???我们发现,

ef已经帮我设置了Id主键的默认值类型,默认值或绑定“(newsequentialid())”,使用了newsequentialid()函数,介绍如下:


1.:newsequentialid 函数比起 newid 函数最大的好处是:如果你在一个 UNIQUEIDENTIFIER 字段上建立索引,使用 newid 产生的新的值是不固定的,所以新的值导致索引B+树的变化是随机的。而 newsequentialid 产生的新的值是有规律的,则索引B+树的变化是有规律的。有规律和无规律就会带来性能的改进。

2:UNIQUEIDENTIFIER做主键(Primary Key)是一件很方便的事情,在数据合并等操作中有不可替代的优势
但是由于普通的GUID的分散性使得如果主键加上聚集索引(Clustered Index)会导致在插入记录时效率大大降低

SQL SERVER 2005中新增了一个NEWSEQUENTIALID的函数,MSDN的解释是:
在指定计算机上创建大于先前通过该函数生成的任何 GUID 的 GUID。
NEWSEQUENTIALID() 不能在查询中引用。
注:即只能做为数据库列的DEFAULT VALUE,不能执行类似SELECT NEWSEQUENTIALID()的语句
只有当计算机没有网卡时,NEWSEQUENTIALID() 生成的 GUID 才在该特定计算机中是唯一的。
注:这句话是错误的,应该是只有只有当计算机有网卡时,生成的GUID才是全球唯一
您可以使用 NEWSEQUENTIALID() 生成 GUID 以减少叶级别索引上的页争用。





上一篇:EasyUI控制Tab选项卡添加切换功能
下一篇:c#/.Net 集合数组一层一层的取值
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-2-1 10:43:26 | 显示全部楼层
不错,多谢!楼主技术很硬啊!硬邦邦的
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 03:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表