SQL Server 2008 GUID列全为0

时间:2011-01-16 00:50:54

标签: sql linq-to-sql sql-server-2008 guid

我希望这是我在我最后做的一个简单的蠢事......

我的数据库设置中有一个表格如下:

column name: widget_guid
data type: uniqueidentifier
allow nulls: false
default value: newid()
identity: false
row guid: true

创建记录时(通过LINQ to SQL),此字段中的值被格式化为GUID但包含全部0的

我的假设是,当创建一个新记录时,会为该列自动生成一个guid,就像一个自动递增的行id。这不是真的吗?任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:7)

您需要在GUID列上检查您的属性 - 您需要确保:

  • Auto Generated Values设置为True(因此您基本上告诉Linq-to-SQL数据库将生成该值)

  • Auto-Sync应设置为OnInsert,以便在您调用context.SubmitChanges()

  • 后,您的C#对象将使用新值填充

使用这两个设置,您应该得到预期的行为:无需在客户端设置GUID,数据库将生成一个新值并插入它,您将在调用{之后立即获取它{1}}

alt text

答案 1 :(得分:1)

在dbml文件中,将字段设置为nullable。 如果将其设置为不可为空,则LINQ不会检查该字段是否具有默认值;它只是认为该字段不可为空,并将发送Guid.Empty导致0。