如何在程序中自动创建ID? (该程序适用于文件)

时间:2013-11-18 19:16:14

标签: c#

我写了一个程序,可以处理删除和更新,存储和搜索等文件和所有客户,我的代码自动为文件的每一行创建一个ID,但我不知道我做了什么的方式是对的。有更好的方法吗?

这就是我将整个文件读入变量的方式,然后文件的最后一行将是查找和ID行号加一,然后我返回

Project Files

Video

类BaseDataAccess中的代码方法CreateAutomicId:

   public virtual int CreateAutomicId()
    {
        var alldata = FRepository.LoadAll();
        var lastline = alldata.Last().Split(',');
        var fetchId = Convert.ToInt32(lastline[0]);

        var plusId = fetchId + 1;

        return plusId;
    }

2 个答案:

答案 0 :(得分:3)

您的解决方案肯定不是线程安全的,如果多个实例同时尝试计算“下一个ID”,那么它们很容易发生冲突。

底层数据源是否有办法跟踪此内容?

在绝大多数情况下,这是首选方法。例如,在数据库中,您可以拥有一个标识列,其中数据库本身的内部工作方式保持下一个值的唯一性。您编写的代码不会为底层系统提供标识,底层系统会告诉您下一个标识是什么。

如果那不可能......

身份是否必须是整数?

如果没有,则System.Guid是唯一标识符的现成来源。使用它可以消除对整个函数的需求,因为您需要生成下一个ID:

var nextID = Guid.NewGuid();

如果 需要是一个整数,那么......

身份是否需要连续?

您仍然可以使用Guid创建.GetHashCode()并将其转换为 very 唯一(尽管我认为not as unique as a Guid)整数。如果您根本不需要保存Guid,则可能是这样简单:

var nextID = Guid.NewGuid().GetHashCode();

或者,在你的功能背景下:

public virtual int CreateAutomicId()
{
    return Guid.NewGuid().GetHashCode();
}

使用Guid还可以从数据源中删除对读取的依赖关系,以生成“下一个”标识符,从而减少I / O瓶颈。

答案 1 :(得分:0)

有很多方法可以做到这一点:

首先使用NewGuid()函数,该函数位于System命名空间和Guid类下。

第二种方式是你可以使用日期和时间。我的意思是你可以将年,月,日,小时,秒和毫秒连接在一起,这样,你就可以按照id生成过程的日期,并根据毫秒产生唯一的Id。

最后一个是DateTime对象中的Ticks。这非常有用。它生成唯一的Int-64大小编号,这是我最喜欢做同样事情的方法。您可以使用它:DateTime.Now.Ticks.ToString()

我希望这些optoins会帮助你。