Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Guid冲突C#_C#_Guid - Fatal编程技术网

Guid冲突C#

Guid冲突C#,c#,guid,C#,Guid,最近,我们在现金支付流程中实施了Guid。在短短的十天内,我们至少收到了十几起关于Guid碰撞的案例。 请说明为什么不同位置的不同终端生成相同的guid,以及如何避免guid冲突 请在下面找到正在生成Guid的类 public class Cash { public Cash() { Id = Guid.NewGuid(); } public Guid Id { get; set; } } 不确定这是否是真正的问题,但这与我

最近,我们在现金支付流程中实施了Guid。在短短的十天内,我们至少收到了十几起关于Guid碰撞的案例。 请说明为什么不同位置的不同终端生成相同的guid,以及如何避免guid冲突

请在下面找到正在生成Guid的类

public class Cash
{
    public Cash() 
    {
         Id = Guid.NewGuid();
    }

    public Guid Id { get; set; }        
}

不确定这是否是真正的问题,但这与我一直在准备的我们公司内部的一次技术会谈相吻合。这是您的代码:

public class Cash
{
    public Cash() 
    {
        Id = Guid.NewGuid();
    }
    public Guid Id { get; set; }
}
。。。这个类有一个基本问题:它没有封装。简而言之,“Id”属性有一个公共setter,这意味着任何使用“Cash”类实例的代码都可以操作其Id属性

因此,我的猜测是以下两种情况之一:

  • 正在复制/引用一个实例,副本自然具有相同的属性 Id属性作为原始属性
  • 系统中某个地方的代码正在干扰Id属性并将其重置为其他内容
  • 即使缺少封装不是这个特定问题的原因,我强烈建议您将该行更改为:

    public Guid Id { get; private set; }
    
    。。。或者

    private Guid id;
    public Id { get { return this.id } }
    

    无论如何,正如一些人所发布的,生成完全重复的GUID几乎是不可能的。因此,我怀疑我上面发布的内容是导致问题的真正原因。

    这些副本来自位于不同位置的不同终端/设备。每个设备都在完全隔离的状态下生成Guid。@是否确认重复的Guid来自不同的终端?或者你只是在假设?@Akhter然后你有一些其他代码分配了错误的值,可能将相同的值设置到多个对象。与其在一个明显安全的函数中寻找重影,不如发布代码的其余部分。如果要使用EntityFramework,您需要一个Id的公共设置器。@JoePhillips我们确认这些guid来自位于不同位置的不同终端