.net - 如何防止 Linq 添加 GUID,以便 SQL Server 可以执行此操作?

标签 .net sql-server linq

我正在以编程方式创建和填充 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. 
  1. 我知道我可以使用 myNewRecord.pk=Guid.newGuid() 分配 PK Guid is all 0's (zeros)?
  2. 但我真正想要的是 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中有类似的东西,如屏幕截图所示。更改此属性可以解决问题

enter image description here

关于.net - 如何防止 Linq 添加 GUID,以便 SQL Server 可以执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741913/

相关文章:

sql - 根据碎片结果自动重建索引?

c# - 使用 SQLite 进行日志记录

c# - 字符串和字符串有什么区别?

sql-server - SQL Server VARCHAR(MAX) 和数据库大小非常高

sql-server - 如何检查 MSDB 的用户权限/角色

c# - Entity Framework 核心 : The property expression 'xx' is not valid. 表达式应表示属性访问: 't => t.MyProperty'

c# - 如何使用 LinQ 按值分组获取字典中的键列表

c# - Linq 是否消除了对 Hibernate 的需求?

c# - Entity Framework : Efficiently grouping by month

c# - 将音频输出发送到所有扬声器设备