SQL Server 2008 GUID列全部为0';s
我希望这是我在这方面做的一件简单的傻事 我的数据库中有一个如下设置的表: 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一样。这不是真的吗?任何帮助都将不胜感激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),此字
谢谢。您需要检查GUID列上的属性-您需要确保的是:
设置为自动生成的值
(因此您基本上告诉Linq to SQL数据库将生成该值)True
应设置为Auto Sync
,以便在调用OnInsert
context.SubmitChanges()后,用新值填充C#对象
.SubmitChanges()
在dbml文件中,将字段设置为nullable。
如果设置为not nullable,LINQ不会检查字段是否有默认值;它只是认为字段不可为空,并将发送Guid.Empty,从而导致0。当您在应用程序代码中创建记录时,是传入Guid还是将其保留为空并让DB自动填充?另外,您应该尝试在应用程序代码中传入
Guid.NewGuid()
来跟踪它。我希望数据库服务器使用newid()创建它。如果UNIQUEIDENTIFIER列的RowGuid属性设置为“Yes”,则将“自动生成的值”属性设置为“True”会更好……不幸的是,下次从数据库生成模型数据时,此设置似乎将丢失!