【问题标题】:SQL Server 2008 GUID column is all 0'sSQL Server 2008 GUID 列全为 0
【发布时间】:2011-01-16 00:50:54
【问题描述】:

我希望这是我最后做的一个简单的错误......

我的数据库中有一个表,如下所示:

列名:widget_guid 数据类型:唯一标识符 允许空值:false 默认值:newid() 身份:假 行指南:真

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

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

谢谢。

【问题讨论】:

  • 当您在应用程序代码中创建记录时,您是传入一个 Guid 还是将其留空并让数据库自动填充?此外,您应该尝试在应用程序代码中传入 Guid.NewGuid() 来跟踪它。
  • 我希望数据库服务器使用 newid() 创建它。

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


【解决方案1】:

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

  • Auto Generated Values 设置为True(所以你基本上告诉 Linq-to-SQL 数据库会生成值)

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

通过这两个设置,您应该得到预期的行为:无需在客户端设置 GUID,数据库将生成一个新值并插入它,您将在调用 @ 后立即将其取回987654327@

【讨论】:

  • 如果将 UNIQUEIDENTIFIER 列的 RowGuid 属性设置为“是”,则将“自动生成的值”属性设置为“真”会很好...
  • 不幸的是,下次您从数据库生成模型数据时,此设置似乎会丢失!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2016-03-22
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多