Subsonic 3 Guid as PK总是给我00000000-0000-0000-0000-000000000000

时间:2009-07-26 13:38:26

标签: subsonic3

使用Subsonic 3,Simple Repository添加总是为我的PK提供00000000-0000-0000-0000-000000000000,这显然会导致我的数据库出错。我看到由Subsonic创建的PK的定义是使用newid()但仍然存在这个问题。

其他人有这个问题吗?

仅供参考我在App_Data目录中使用本地SQL Server 2005数据库。

2 个答案:

答案 0 :(得分:1)

我也使用GUID作为PK。我的PK默认设置是......

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

我一直在经历亚音速源,我开始认为这与......我不太了解的事实有关。

我知道Subsonic没有看到NOT NULL,PK,默认设置列为READ ONLY。

因此,假设您在解决方案中没有任何其他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 Guids。

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

答案 1 :(得分:1)

使用Guid时,SubSonic希望您设置它们。你最好的选择是构造函数中的Guid.NewGuid()。请记住,SimpleRepo是“POCO-first”的想法。数据库只是数据的一个地方。