SQL Server 2008 GUID列全部为0';s

SQL Server 2008 GUID列全部为0';s,sql,linq-to-sql,sql-server-2008,guid,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 列名:widget\u guid 数据类型:唯一标识符 允许空值:false 默认值:newid() 身份:假 行guid:true 创建记录时(通过LINQ到SQL),此字

我希望这是我在这方面做的一件简单的傻事

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

column name: widget_guid data type: uniqueidentifier allow nulls: false default value: newid() identity: false row guid: true 列名:widget\u guid 数据类型:唯一标识符 允许空值:false 默认值:newid() 身份:假 行guid:true 创建记录时(通过LINQ到SQL),此字段中的值将格式化为GUID,但包含所有0

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


谢谢。

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

  • 自动生成的值
    设置为
    True
    (因此您基本上告诉Linq to SQL数据库将生成该值)

  • Auto Sync
    应设置为
    OnInsert
    ,以便在调用
    context.SubmitChanges()后,用新值填充C#对象

通过这两个设置,您应该可以获得预期的行为:无需在客户端设置GUID,数据库将生成一个新值并插入它,并且在调用
.SubmitChanges()


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

当您在应用程序代码中创建记录时,是传入Guid还是将其保留为空并让DB自动填充?另外,您应该尝试在应用程序代码中传入
Guid.NewGuid()
来跟踪它。我希望数据库服务器使用newid()创建它。如果UNIQUEIDENTIFIER列的RowGuid属性设置为“Yes”,则将“自动生成的值”属性设置为“True”会更好……不幸的是,下次从数据库生成模型数据时,此设置似乎将丢失!