【问题标题】:Subsonic 3 Guid as PK always gives me 00000000-0000-0000-0000-000000000000Subsonic 3 Guid 作为 PK 总是给我 00000000-0000-0000-0000-000000000000
【发布时间】:2009-07-26 13:38:25
【问题描述】:

使用 Subsonic 3,简单存储库 Add 总是为我的 PK 提供 00000000-0000-0000-0000-000000000000,这显然会导致我的数据库出现错误。我看到 Subsonic 创建的我的 PK 的定义是使用 newid() 但仍然有这个问题。

其他人有这个问题吗?

仅供参考,我使用的是位于我的 App_Data 目录中的本地 SQL Server 2005 DB。

【问题讨论】:

    标签: subsonic3


    【解决方案1】:

    当您使用 Guid 的 SubSonic 时,您需要设置它们。您最好的选择是在构造函数中使用 Guid.NewGuid()。请记住,SimpleRepo 是“POCO 优先”的思想。数据库只是一个存放数据的地方。

    【讨论】:

    • 明白了,我的假设是,如果我为我的 PK 使用一个 int 并在我使用 Add 时将其取回,guid 也会发生同样的情况
    【解决方案2】:

    我还使用 GUID 作为 PK。我的PK默认设置是……

    (CONVERT([uniqueidentifier],CONVERT([binary](6),getdate(),(0))+CONVERT([binary](10),newid(),(0)),(0)))
    

    我一直在研究亚音速源,我开始认为这与以下事实有关……嘘,我不太清楚。

    我知道 Subsonic 没有看到 NOT NULL, PK, Default Setting 的列是只读的。

    因此,假设您在解决方案中没有任何其他 PK 数据类型,您可以在 Structs.tt 文件中添加几行...

    在第 30 行找到 foreach 循环...

    <#          foreach(var col in tbl.Columns){#>
    
                Columns.Add(new DatabaseColumn("<#=col.Name#>", this)
                {
                 IsPrimaryKey = <#=col.IsPK.ToString().ToLower()#>,
                 DataType = DbType.<#=col.DbType.ToString()#>,
                 IsNullable = <#=col.IsNullable.ToString().ToLower()#>,
                 AutoIncrement = <#=col.AutoIncrement.ToString().ToLower()#>,
                 IsForeignKey = <#=col.IsForeignKey.ToString().ToLower()#>
                 <#  if (col.IsPK.ToString().ToLower() == "true"){  #>
                 , IsReadOnly = <#=col.IsPK.ToString().ToLower()#>
                 <#  }  #>
                });
    

    您要添加的部分是 IsForeignKey 之后的 IF 语句。

    只要你有一些默认设置,这应该使它适用于你的 PK Guid。

    不过,我无法对您在数据库中可能拥有的任何其他 PK 做出任何保证。你已经被警告了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2022-08-07
      相关资源
      最近更新 更多