代码之家  ›  专栏  ›  技术社区  ›  Mathias Lykkegaard Lorenzen

在实体框架核心错误实践中实例化guid吗?

  •  9
  • Mathias Lykkegaard Lorenzen  · 技术社区  · 6 年前

    如果我有一个带类型键的模型 Guid ,在构造函数中显式设置ID是否是错误的做法?

    我知道它将由实体框架隐式地设置,但是如果显式地设置它,会发生什么不好的事情(可能是性能方面的)?

    例子:

    class MyModel
    {
        public MyModel()
        {
            Id = Guid.NewGuid();
        }
    
        [Key]
        public Guid Id { get; set; }
    }
    

    我在想一个 GUID 是由SQL Server中的顺序ID备份的,如果我显式地设置一个值,我想我会降低索引性能,因为它将不再是顺序的?

    我一直没能找到答案,对此我非常好奇。

    1 回复  |  直到 6 年前
        1
  •  11
  •   Matías Fidemraizer    6 年前

    我看到的是设计缺陷而不是性能问题:模型不应该生成 id . 这是他们的责任。存储库在 Add 方法。

    Guid 可以通过多种方式生成:例如,它可以是随机的或连续的。两种方法都有不同的算法来生成它们。因此,你的选择只有一个。

    你在强迫模特 身份证件 已分配:您可能不希望这样做,以便在模型可能需要持久化之前延迟其分配。 例如,零 GUID 知道一些模型还没有持久化可能很有用。