不再使用自动编号了。自己写了一个Id生成器,超级简单
不再使用自动编号了。自己写了一个Id生成器,超级简单
Posted on 2005-08-30 14:44 浪淘沙 阅读(532) 评论(9) 编辑 收藏 收藏至365Key 所属分类: Janssen帮一个朋友导数据时就发生自动编号的主键发生重复,花了我大半天的时间。累死了。给他们写了一个小工具,生成时间戳的代码:
public class IdentityGenerator{
private static Random random;
public static long GetIdentity(){
long id = (DateTime.Now.Ticks-(new DateTime(2000,1,1,0,0,0)))/1000000;//1000000精确到秒,要更精确,比如到100毫秒可再减少数字
if(random!=null)
random = new Random();
id = id * 1000 + random.Next(0,1000);//取3位随机数
return id;
}
}使用方法:
直接调用IdentityGenerator.GetIdentity()
如果使用数据实体的化可以设计一个基类
1 public class BaseData{
2 private long _identity;
3 public class BaseData(){
4 this._identity = IdentityGenerator.GetIdentity();
5 }
6 //继承后在实体中定义其属性名,返回 或设置该值,如果名字相同可以将其改为public
7 protected long Identity{
8 get{return this._identity;}
9 set{
10 if(this._identity!=value)
11 this._identity = value;
12 }
13 }
14 //重新设置Id
15 public void ResetIdentity(){
16 this._identity = IdentityGenerator.GetIdentity();
17 }
18
19 }
2 private long _identity;
3 public class BaseData(){
4 this._identity = IdentityGenerator.GetIdentity();
5 }
6 //继承后在实体中定义其属性名,返回 或设置该值,如果名字相同可以将其改为public
7 protected long Identity{
8 get{return this._identity;}
9 set{
10 if(this._identity!=value)
11 this._identity = value;
12 }
13 }
14 //重新设置Id
15 public void ResetIdentity(){
16 this._identity = IdentityGenerator.GetIdentity();
17 }
18
19 }
简单才好!
优点:使用bigint型字段、比Guid好看些,大范围内是按顺序排列的,基本不会在前面的序列插入,短时间内(1秒钟)可能有无序产生,不过影响不是太大。简单省事
缺点:仍然存在重复的可能性,对于并发处理量超大的请仔细斟酌再三考虑。
仍然有人批评生成的3214578921之类的id太难看了,而且长:(
我想对于在浏览器上靠猜测
view.aspx?id=124下一个帖子125是什么的人可能不管用了,因为相邻两个id间距不等,至少也有好几千的:)可以起到 一个保护性作用吧。
裸机里面用记事本敲代码真麻烦,到此为止吧。
Feedback
http://onlytiancai.cnblogs.com/archive/2005/07/28/201842.html
偶这里整理了一些随机数的讨论。如果是用作企业应用的标识的话,应该有一套规则,像身份证号一样,有部分代表区域,有部分代表生日,有部分代表性别等。产品的话就千几位代表大分类,后几位代表小分类,然后再后几位随机序号。纯粹的不重复的标识,用GUID就行。
偶这里整理了一些随机数的讨论。如果是用作企业应用的标识的话,应该有一套规则,像身份证号一样,有部分代表区域,有部分代表生日,有部分代表性别等。产品的话就千几位代表大分类,后几位代表小分类,然后再后几位随机序号。纯粹的不重复的标识,用GUID就行。
Guid也是一个选择,这里只是再提供一个方法。毕竟也有不喜欢Guid那么长串的复杂咚咚。
很多人还是喜欢数字的。
很多人还是喜欢数字的。
我的文章中也提到了这种方式的缺点,就是如何要进行系统集成就麻烦了。
http://tintown.cnblogs.com/archive/2005/03/02/111459.aspx
http://tintown.cnblogs.com/archive/2005/03/02/111459.aspx



浙公网安备 33010602011771号