我们使用 Guid 作为数据库中实体的主键。传统上,我们遵循让数据库在插入期间为实体设置 ID 的模式,我认为主要是因为这通常是您使用自动增量字段或其他方式处理事情的方式。
我越来越发现在对象构造期间在代码中进行键分配要方便得多,主要原因有两个:
- 您知道,一旦对象的构造函数运行,它的所有字段都已初始化。您永远不会有“半生不熟”的物体在四处乱窜。
- 如果您需要执行一批操作,其中一些操作取决于知道对象的键,您可以一次完成所有操作,而无需往返数据库。
有什么令人信服的理由不这样做吗?也就是说,当使用 Guid 作为键时,是否有充分的理由将键分配留给数据库?
编辑: 很多人对是否应该将Guids用于PK(我知道)有强烈的意见,但这并不是我问题的重点。
除了集群问题(如果您正确设置索引,这似乎不是问题),我还没有看到避免在应用程序层创建键的令人信服的理由。