社区
C#
帖子详情
EF插入数据,GUID为主键
oLanJieKou
2014-04-29 11:04:46
RT
意思是说一张表中包含GUID主键,并且设置了数据库默认值newid() 使用EF添加数据的时候,GUID生成有问题 值为00000000-0000-0000-0000-000000000000 有什么办法让我不需要手动传入GUID 然后EF能自动生成正确的办法么
...全文
557
9
打赏
收藏
EF插入数据,GUID为主键
RT 意思是说一张表中包含GUID主键,并且设置了数据库默认值newid() 使用EF添加数据的时候,GUID生成有问题 值为00000000-0000-0000-0000-000000000000 有什么办法让我不需要手动传入GUID 然后EF能自动生成正确的办法么
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luzjoyme
2014-08-21
打赏
举报
回复
System.Guid.newGuid().tostring
xdashewan
2014-04-30
打赏
举报
回复
因为你程序里的guid并不是个null值,而是和int类型相似有个00000000-0000-0000-0000-000000000000的默认值,ef再判断时候认为00000000-0000-0000-0000-000000000000是一个有效的guid而不是空,所以顺理成章的把这个值插入数据库
oLanJieKou
2014-04-30
打赏
举报
回复
但是我一直有个疑问 不是说EF也是拼接SQL传入数据库么 为什么数据库的默认值对EF无效呢 那是不是说EF并不是像我们平常那样传入SQL的写法 还是做了另外的一些操作
oLanJieKou
2014-04-30
打赏
举报
回复
OK 说接分都来了 - - 履行诺言 2L 40 ~~
xdashewan
2014-04-30
打赏
举报
回复
引用 1 楼 oLanJieKou 的回复:
唉 这个问题我还是在程序生成了插入数据库吧 有人需要接分么 1L 40分!
insert的时候别把主键带进去
moonwrite
2014-04-30
打赏
举报
回复
那我就来接分~ 告诉你为什么会有00000000 那是因为所有值类型都有默认值~ 而Guid的默认值是:00000000 因为Guid有了默认值 所以数据库的NewId就没有效果了~
xdashewan
2014-04-30
打赏
举报
回复
因为之前我没注意的时候也这样来了一回
xdashewan
2014-04-30
打赏
举报
回复
来啦,接分,刚想告诉你程序生成可能比较大
oLanJieKou
2014-04-30
打赏
举报
回复
唉 这个问题我还是在程序生成了插入数据库吧 有人需要接分么 1L 40分!
详解C#批量
插入
数据
到Sqlserver中的四种方式
本篇,我将来讲解一下在Sqlserver中批量
插入
数据
。 先创建一个用来测试的
数据
库和表,为了让
插入
数据
更快,表中
主键
采用的是
GUID
,表中没有创建任何索引。
GUID
必然是比自增长要快的,因为你生成一个
GUID
算法所花的时间肯定比你从
数据
表中重新查询上一条记录的ID的值然后再进行加1运算要少。而如果存在索引的情况下,每次
插入
记录都会进行索引重建,这是非常耗性能的。如果表中无可避免的存在索引,我们可以通过先删除索引,然后批量
插入
,最后再重建索引的方式来提高效率。 create database CarSYS; go use CarSYS; go CREATE TABLE Product( Id
EF
Core 官方指南.pdf
EF
Core 官方指南.pdf 中文版本 ,适合所有人查看
EF
Core 官方指南.pdf
EF
Core——
主键
(4)
主键
一、
主键
二、
Guid
主键
三、其他方案 一、
主键
1、
EF
Core支持多种
主键
生成策略:自动增长;
Guid
;Hi/Lo算法等 2.自动增长。 优点:简单;缺点:
数据
库迁移及分布式系统中比较麻烦;并发性能差 3.自增字段代码不能为Id赋值,默认为0,否则运行报错 二、
Guid
主键
1.
Guid
算法,生成一个全局唯一的Id。适合分布式系统,进行
数据
合并的时候很简单, 优点:简单,高并发;缺点:磁盘暂用空间大 2.
Guid
的值不连续。使用
Guid
类型做
主键
的时候,
EF
Core
主键
有的
数据
库支持部分的连续
Guid
,比如SQLServer中的NewSequentialId(),但也不能解决问题。在MySQL中,
插入
频繁的表不要用
Guid
做
主键
。
主键
值由两部分组成:高位(Hi)和低位(Lo),高位由
数据
库生成,两个高位之间间隔若干个值,由程序在本地生成低位,低位的值在本地自增生成。不同进程或者集群中不同服务器获取的Hi值不会重复,而本地进程计算的Lo则可以保证可以在本地高效率的生成
主键
值。不仅保证了性能,而且利用了
Guid
的优点,而且减轻了
主键
自增性导致
主键
值可被预测带来的安全性问题。
杨中科
EF
CORE 第三部分
主键
1、
EF
Core支持多种
主键
生成策略:自动增长;
Guid
;Hi/Lo算法等。2、自动增长。优点:简单;缺点:
数据
库迁移以及分布式系统中()比较麻烦;并发性能差(long、int等类型
主键
,默认是自增。因为是
数据
库生成的值,所以SaveChanges后会自动把
主键
的值更新到Id属性。试验一下。场景:
插入
帖子后,自动重定向帖子地址。3、自增字段的代码中不能为Id赋值,必须保持默认值0.否则运行的时候就会报错示例:SaveChanges后会自动把
主键
的值更新到Id属性。
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章