2010-04-12 46 views
0

當將linq-to-sql與時間戳一起用作複合主鍵的一部分時,出現此錯誤:時間戳作爲複合主鍵的一部分?

「服務器無法生成'Timestamp'類型的主鍵列。

我猜這可能是由於事實上時間戳只是一個行版本,因此也許它必須在插入後創建?或...

回答

0

你可以解決它..設置

  • 自動生成的值設置爲True
  • 自動同步到OnInsert

...除非你已經有

+0

@gbn謝謝。聽起來像這樣可以工作,但我可能不會在PK中使用它,因爲我不想修改DBML。 – 2010-04-12 19:11:35

5

不使用時間戳數據類型!

不建議使用timestamp語法。 此功能將在 未來版本的Microsoft SQL 服務器中刪除。避免在 新開發工作中使用此功能,並計劃到 修改當前使用 此功能的應用程序。

時間戳(的Transact-SQL)http://msdn.microsoft.com/en-us/library/ms182776(SQL.90).aspx rowversion(的Transact-SQL)http://msdn.microsoft.com/en-us/library/ms182776.aspx

另外,如果主要是爲了改變,以保持版本的軌道,爲什麼讓它的一部分主鍵?更改主鍵會導致很多問題!

如果您需要主鍵的系統生成值,請使用標識guid

IDENTITY(屬性)http://msdn.microsoft.com/en-us/library/aa933196(SQL.80).aspx
GUID唯一標識符http://msdn.microsoft.com/en-us/library/aa260656(v=SQL.80).aspx

+0

@KM謝謝你的信息,但沒有linq-to-sql需要時間戳用於分離對象的樂觀併發嗎? 我這樣做的主要原因是我真的不需要主表的主鍵,或者我不在乎是否有重複的條目提供並非每個字段都重複。基本上,我使用它作爲密碼恢復的令牌存儲,並且用戶可以多次請求密碼。我只是在表中存儲新的令牌,因爲我不想檢查它是否已經存在。 – 2010-04-12 18:39:35

+0

@KM在Visual Studio 2008中,rowversion也不是一個選項。 – 2010-04-12 18:42:50

+0

嘗試使PK成爲一個標識,時間戳只是一列,就像本例中一樣:http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008 /07/01/10557.aspx查看關於rowversion的鏈接http://thedatafarm.com/blog/data-access/if-timestamp-is-deprecated-why-do-none-of-the-current-db-tools -support-rowversion/ – 2010-04-12 18:47:21

相關問題