2011-08-24 78 views
1

我在我的C#項目中使用EF4。我面臨的問題是,當我嘗試保存一條記錄時,出現主鍵違例,PK值爲「0000-0000-0000-xxx」。根據我的猜測,EF不識別IsIdentity標誌並生成一個guid值。在我的表的SQL Server數據庫中,我指定了一個PK(uniqueidentifier> guid)並將其設置爲IdentityColumn,因此我希望這會傳遞到我的項目中,因爲guid是在SQL Server中生成的。有沒有辦法克服這個錯誤?當我嘗試保存新記錄或更新現有記錄時,EF返回0000-0000-0000-xxx作爲Guid?

回答

8

您必須指定Guid ID在你的EF模型的身份。在EF 4.1:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 

如果您創建了這個模型數據庫EF將創建一個柱的newid()默認值(Guid ID是不是默認的身份,而相比之下,int IDS) 。

在EF 4.0中,您可以轉到模型設計器,在設計器中標記您的Id屬性,打開屬性窗口,然後將StoreGeneratedPattern設置爲Identity

2

取而代之的是:

public System.Guid ID { get; set; } 

試試這個:

private System.Guid _id; 
public System.Guid ID 
{ 
    get 
    { 
     if (_id == null || _id == Guid.Empty) 
      _id = Guid.NewGuid(); 
     return _id; 
    } 
    set 
    { 
     _id = value; 
    } 
} 
+0

'_id'永遠不能爲null,因爲它是一個值類型。唯一可以與null進行比較的值類型是「可爲空值」。 –