C# · 12月 25, 2021

在C#中创建Guid键与DB之间的区别

我们使用Guids作为数据库中实体的主键.传统上,我们遵循一种让数据库在INSERT期间设置实体的ID的模式,我认为主要是因为这通常是使用自动增量字段或其他方式来处理事物的方式.

我越来越多地发现,在对象构造期间,在代码中进行密钥分配是很有帮助的,主要有两个原因:

>你知道,一旦一个对象的构造函数运行,它的所有字段都被初始化了.你没有“半烤”的对象踢.
>如果您需要执行一批操作,其中一些操作取决于知道对象的密钥,您可以一次完成所有操作,而无需往返数据库.

有没有什么令人信服的理由不这样做?也就是说,当使用Guid作为键时,是否有很好的理由将密钥分配留给数据库?

编辑:
很多人对于是否应该用PK来(我知道的)是否有强烈的意见,但这并不是我问题的重点.

除了集群问题(如果您正确设置索引似乎不是问题),我还没有看到一个引人注目的理由,以避免在应用程序层中创建密钥.

解决方法 我认为你在客户端创建它们是很好的.正如你所说,如果你让数据库做到这一点,你必须找到一些方法(不能想到任何真正的)来获得该密钥.如果您正在使用身份,那么您可以使用呼叫来获取为表创建的最新的呼叫,但是我不确定这是否存在于guid.