2009-07-26 53 views
0

使用Subsonic 3,簡單的存儲庫添加總是給我一個00000000-0000-0000-0000-000000000000我的PK,這顯然導致錯誤我的數據庫。我看到Subsonic創建的PK的定義是使用newid(),但仍然存在這個問題。Subsonic 3 Guid作爲PK總是給我00000000-0000-0000-0000-000000000000

其他人有這個問題嗎?

僅供參考我正在使用位於我的App_Data目錄中的本地SQL Server 2005數據庫。

回答

1

當您使用Guid的SubSonic期望您設置它們。你最好的選擇是在構造函數中Guid.NewGuid()。請記住,SimpleRepo是「POCO優先」的思想。數據庫只是一個數據的地方。

+0

問題是,我的假設是,如果我使用int來表示我的PK,並在我使用Add時將其取回,那麼GUID – Slee 2009-10-26 01:19:35

1

我也使用GUID作爲PK。我的PK默認設置是...

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

我已經經歷了亞音速源和我開始認爲這是關係到一個事實,即... SHIZ我不太知道。

我知道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你可能在數據庫中有任何保證。你已經警告過。