0

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

还有其他人有这个问题吗?

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

4

2 回答 2

1

我还使用 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 做出任何保证。你已经被警告过了。

于 2009-10-25T22:41:29.537 回答
1

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

于 2009-10-26T00:09:39.973 回答