使用Subsonic 3,Simple Repository添加总是为我的PK提供00000000-0000-0000-0000-000000000000,这显然会导致我的数据库出错。我看到由Subsonic创建的PK的定义是使用newid()但仍然存在这个问题。
其他人有这个问题吗?
仅供参考我在App_Data目录中使用本地SQL Server 2005数据库。
答案 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”的想法。数据库只是数据的一个地方。