我们使用Guids作为数据库中实体的主键.传统上,我们遵循一种让INSERT期间数据库为实体设置ID的模式,我认为这主要是因为这通常是你使用自动增量字段或其他方式处理事物的方式.
我发现在对象构建过程中在代码中进行键分配更加方便,主要有两个原因:
你知道,一旦对象的构造函数运行,它的所有字段都已初始化.你永远不会有"半生不熟"的物体.
如果你需要做一批操作,其中一些操作依赖于知道一个对象的密钥,你可以一次完成所有这些操作而不需要往返于数据库.
有没有令人信服的理由不以这种方式做事?也就是说,当使用Guids作为密钥时,是否有充分的理由将密钥分配保留到数据库中?
编辑: 很多人对Guids是否应该用于PK(我知道)有强烈的意见,但这不是我的问题.
除了集群问题(如果正确设置索引似乎没有问题),我还没有看到避免在应用程序层中创建密钥的令人信服的理由.
我认为你在客户端创建它们做得很好.正如你所提到的,如果你让数据库做到这一点,你必须找到一些方法(不能想到任何真正的)来获得该密钥.如果您使用的是身份,则可以使用调用来获取为表创建的最新版本,但我不确定是否存在guid.