我正在以编程方式创建和填充 LINQ to SQL 对象,然后将它们添加到带有 PK 的 uniqueidentifier 列的 SQL Server 数据库中。 LINQ 自动分配全 0 的 PK。这会在插入时产生错误,因为 PK 是重复的。
Dim myNewRecord as IceCreamTrackerTable
myNewRecord.name=Bob
myNewRecord.favoriteIceCream=Vanilla
'myNewRecord.PK=00000000-0000-0000-0000-000000000000 (by default)'
myDataContext.IceCreamTrackerTables.insertOnSubmit(myNewRecord)
''second record added throws an error because it also has PK 00000 etc.
- 我知道我可以使用 myNewRecord.pk=Guid.newGuid() 分配 PK Guid is all 0's (zeros)?
- 但我真正想要的是 SQL Server 分配 GUID,因为我假设它有某种方法来确保它不会重新分配相同的 GUID
有没有办法告诉 LINQ 我不想自己填写 GUID,而是将其留给 SQL Server?
最佳答案
Guid 是值类型,因此它们不能为 null。这意味着当创建 Guid 时,它必须分配一个默认值(全 0)。 SQL Server 不会像为标识列那样自动为主键生成 GUID。您可以将默认值设置为 NEWID(),但默认情况下 EF 将忽略该值并尝试插入值。您可以通过执行此处描述的操作来覆盖此设置
http://softmindit.blogspot.com/p/using-guid-as-entitykey-in-entity.html
编辑:我刚刚意识到您使用的是 Linq to sql 而不是 Linq toEntity。不过,我确信 L2S 中有类似的东西可以处理这个问题。
Edit2:linq to sql中有类似的东西,如屏幕截图所示。更改此属性可以解决问题
关于.net - 如何防止 Linq 添加 GUID,以便 SQL Server 可以执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741913/