c# - 在 Entity Framework Core 中实例化 GUID 是不好的做法吗?
问题描述
如果我有一个带有 type 键的模型,Guid
那么在构造函数中显式设置 ID 是不好的做法吗?
我知道它将由实体框架隐式设置,但是显式设置会发生什么不好的事情(也许是性能方面的)?
例子:
class MyModel
{
public MyModel()
{
Id = Guid.NewGuid();
}
[Key]
public Guid Id { get; set; }
}
我在想 aGuid
由 SQL 服务器中的顺序 ID 支持,如果我明确设置一个值,我想我会降低索引性能,因为它不再是顺序的?
我一直无法找到答案,对此我非常好奇。
解决方案
我看到的是设计缺陷而不是性能问题:模型不应该生成它们的id
. 这是他们的责任。Add
存储库在方法中这样做。
Guid
可以通过多种方式生成:例如,它可以是随机的或顺序的。有不同的算法可以生成它们。因此,您的选择仅限于一个。
而且您正在强制id
分配模型的那一刻:您可能不希望这样做以延迟其分配,直到模型可能需要持久化。例如,零Guid
可能有助于了解某些模型尚未持久化。