Linq to sql 我们是否必须在LinqToSql应用程序中使用GUID来唯一标识对象

Linq to sql 我们是否必须在LinqToSql应用程序中使用GUID来唯一标识对象,linq-to-sql,guid,identity,Linq To Sql,Guid,Identity,我继承了一个LinqToSql应用程序,它正在为对象使用GUID键。 我更愿意使用传统的身份识别字段——人们更容易使用、理解和交流。然而,有些业务逻辑要求应用程序在将唯一对象持久化到数据库之前识别它们,这就是为什么首先使用guid的原因 我们面临的另一个问题是碎片索引——我们不能在.Net代码中创建顺序GUI 由于这是我在LinqToSql中的第一次练习,我想知道其他人是如何解决这个问题的 顺便说一句,多台服务器之间的数据不需要合并,这是我过去使用GUID键的主要(唯一)原因。不,你不必使用GU

我继承了一个LinqToSql应用程序,它正在为对象使用GUID键。 我更愿意使用传统的身份识别字段——人们更容易使用、理解和交流。然而,有些业务逻辑要求应用程序在将唯一对象持久化到数据库之前识别它们,这就是为什么首先使用guid的原因

我们面临的另一个问题是碎片索引——我们不能在.Net代码中创建顺序GUI

由于这是我在LinqToSql中的第一次练习,我想知道其他人是如何解决这个问题的


顺便说一句,多台服务器之间的数据不需要合并,这是我过去使用GUID键的主要(唯一)原因。

不,你不必使用GUID,你可以使用任何你喜欢的键类型

如果您被GUID所困扰,请考虑通过为PK字段<代码> NexStRealIdId()/代码>进行默认绑定,使数据库按顺序生成它们。这至少可以消除聚集索引中的碎片。如果这样做,您需要对.dbml进行一些修改。在.dbml

Auto-Generated Value=true
Auto-Sync=OnInsert

至于在插入数据库之前生成值,我看不出使用标识字段有什么帮助。您仍然需要插入到数据库中才能可靠地获得正确的值。(标识列将具有与上述相同的自动生成/自动同步设置)


在Int或Guid中,您应该能够在事务中包装插入,插入记录,获取新的键值,运行业务逻辑,如果失败,则回滚新插入的记录。

使用标识字段打破了生成唯一键值的需要-这是我们的关键问题。但是,仅仅为了在我们的应用程序中获得唯一的密钥,使用GUID似乎是一个很大的折衷。我的观点是,无论您使用GUID还是INT,都可以让数据库为其中一个生成正确的顺序值,并且两者都可以很好地与linq to sql配合使用。您计划在代码中还是在数据库中生成密钥int?根据你的问题,我以为你会让DB去做。然后你提到,在将值放入数据库之前需要它,这是不容易实现的,因此你周围的事务需要对象插入和业务逻辑。哦,我同意你可能不需要guid。重构现有代码以使用ints对您来说应该不是太难。