The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

SQL 2000 的 Uniqueidentifier 欄位在 LINQ to SQL 的問題

我有個專案原本都在 SQL Server 2005 上面開發的,到最後才將資料庫轉換到 SQL Server 2000 上,結果在執行 Insert 的時候卻發生 "The primary key column of type 'UniqueIdentifier' cannot be generated by the server. " 錯誤訊息,如下圖:

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 之後,就一直不斷發現一些小地方讓我十分滿意。