未生成唯一GUID

时间:2017-05-04 12:09:21

标签: asp.net entity-framework entity-framework-6

我在存储数据时遇到了一个非常奇怪的事件。 我的表使用Guid作为主要ID,并且出于某种原因,它为所有新条目记录了相同的Guid。

表格构造

public class Checkpoint
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    public string Title { get; set; }

    public DateTime? CreatedOn { get; set; }
    public DateTime? ModifiedOn { get; set; }
}

public class Track
{
    public Track()
    {
       Checkpoints = new List<Checkpoint>();
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    public List<Checkpoint> Checkpoints { get; set; }

    public DateTime? CreatedOn { get; set; }
    public DateTime? ModifiedOn { get; set; }
}

从模型转换为存储在轨道中的新检查点列表的代码段。

var trackObject = new Track();

var checkpointList = model.Checkpoints.ConvertAll(x => new Checkpoint {Title = x.Title});

trackObject.Checkpoints.Add(checkpointList);

db.Track.Add(trackObject);
await db.SaveChangesAsync();

检查点表结果(省略了指向Track对象的外键):

ID                                     |  TITLE   |  CREATED_ON
--------------------------------------------------------------------------------
c3451b2b-bb30-e711-b867-f01faf23929d   |  First   |  4/05/2017   11:16:50 AM    
c5451b2b-bb30-e711-b867-f01faf23929d   |  Second  |  4/05/2017   11:16:50 AM
c6451b2b-bb30-e711-b867-f01faf23929d   |  Third   |  4/05/2017   11:16:50 AM    
c7451b2b-bb30-e711-b867-f01faf23929d   |  Sprint  |  4/05/2017   11:16:50 AM    
c8451b2b-bb30-e711-b867-f01faf23929d   |  Home    |  4/05/2017   11:16:50 AM    
c9451b2b-bb30-e711-b867-f01faf23929d   |  Finish  |  4/05/2017   11:16:50 AM

可以看出,所有ID字段都是相同的。 代码中的错误在哪里?

1 个答案:

答案 0 :(得分:1)

这些都是独一无二的。看看这些发布的guid的第二个数字。 EF代码告诉SQL生成新的顺序指南(TSQL NEWSEQUENTIALID())。

https://docs.microsoft.com/en-us/sql/t-sql/functions/newsequentialid-transact-sql