我正在开发一个使用ASP.NET MVC 4和Entity Framework 5跟踪错误和软件更改的票务系统。我需要一种方法从一组可能的数字中选择一个唯一的数字。我的想法是在使用它们并将其分配给支持票据时,从该集合中创建一组可能的数字和标记号码。
我有这个代码用于生成所有可能的票号以供选择,但我希望有前导零,以便所有票号具有相同的长度:
public static class GenerateNumber
{
private static IEnumerable<int> GenerateNumbers(int count)
{
return Enumerable.Range(0, count);
}
public static IEnumerable<string> GenerateTicketNumbers(int count)
{
return GenerateNumbers(count).Select(n => "TN" + n.ToString());
}
}
我想要输出
IEnumerable<string> ticketNumbers = GenerateNumber.GenerateTicketNumbers(Int32.MaxValue);
是这样的:
TN0000000001
。
。
。
TN2147483647
希望我们不需要像Int32.MaxValue
那样大的任何东西,因为这意味着我们有太多的错误哈哈。我只想对可用数字的限制保证安全而不是遗憾。也许我们可以使用在解决后重复使用票号的方法。但是,我不知道我对重用的感觉,因为它可能导致以后引用文档的模糊性。
考虑到这个集合的大小,这是获得唯一票号的最有效方法吗?
答案 0 :(得分:5)
在数据库中使用标识列 - 这将为您自动增量。
如果您还需要一个前缀,那么将其存储为单独的varchar列,然后为了显示目的,您可以连接它(如果绝对必要,则使用必需的前导零)。试图在varchar字段中存储一个递增的数字,有一天会在你的屁股中咬你。
作为旁注,为什么领先的零?如果我要修票,我想用票号注释我的代码。领先的零只是一种痛苦 - 为什么不只是拥有TN-123而且数量会根据需要变大?