我有個專案原本都在 SQL Server 2005 上面開發的,到最後才將資料庫轉換到 SQL Server 2000 上,結果在執行 Insert 的時候卻發生 "The primary key column of type 'UniqueIdentifier' cannot be generated by the server. " 錯誤訊息,如下圖:
不過我在「建立時間」欄位上設定 Auto Generated Value 為 True 是可以正常運作的!
看這個樣子應該是 LINQ to SQL 在 SQL Server 2000 資料庫中的 Primary Key 不支援 Auto Generated Value,也就是說我的 LINQ to SQL Class 裡面每一個表格的 Primary Key 定義都必須將 Auto Generated Value 設定為 False ( 也是預設的狀態 ),但為了減少現有程式的修改量,我在每一個表格加上一個 OnCreated() Partial Method,並在這裡指定預設的 Guid 就解決所有問題了。
public partial class Role
{
partial void OnCreated()
{
if (this.ID.CompareTo(new Guid()) == 0)
{
this.ID = Guid.NewGuid();
}
}
}
LINQ to SQL 的架構真的很直覺,有很多以前要寫很多 Code 的地方現在都簡化了,我也自從開始用 LINQ to SQL 之後,就一直不斷發現一些小地方讓我十分滿意。