2011-01-06 49 views
8

所以我有一個在數據庫中的表,只有一個列是一個nvarchar(800)。屬性「文本」是對象的關鍵信息的一部分,不能修改

當我嘗試這樣做:

try 
{ 
    UserTable = (from x in entities.userTable where x.uID == uID select x).Single(); 
    UserTable.DateCreated = DateTime.Now; 
    UserTable.text= newText; 
    Update(UserTable); 
} 

我得到捕捉到了異常:"The property 'text' is part of the object's key information and cannot be modified."

當我看着桌子上,我看不出在「關鍵」或「指數」什麼。所以這不是關鍵,我不明白爲什麼C#會給我提供不正確的信息。 SQL Management Studio中沒有任何關於「text」是鍵或索引的內容。我該怎麼辦?

回答

16

桌上有PK嗎?如果不是,EF將所有字段/列用作「關鍵信息」的一部分。

+0

哦,你說的對,uID不是關鍵,我以爲是。現在uID是一個主鍵。但是,它仍然會給出同樣的例外。 – Dexter 2011-01-06 20:43:00

0

雙擊Models文件夾下的edmx文件查看數據模型。

確保密鑰正確映射。如果您右鍵單擊列,您可以切換實體鍵屬性。一旦有問題的列未標記爲實體鍵,您應該可以更新該值。

0

遵循以下簡單步驟

第1步:檢查表是否具有數據庫的主鍵列與否。如果它沒有任何主鍵,則添加一個主鍵。因爲如果我們不向表中添加主鍵,那麼實體框架會創建它自己的鍵集合並在其中添加所有列。

步驟2:打開您的.edmx文件以查看錶格對象映射。您將能夠看到每一列表的圖標都像主鍵。因此請點擊您的頁面並從數據庫更新.edmx。

步驟3:如果仍然在所有列上看到相同的主鍵圖標,而不是點擊列名稱,則要逐個更新並轉至屬性窗口並將實體鍵屬性設置爲false。

0

這裏的問題是實體框架無法更改特定表的主鍵。現在,如果您尚未爲表指定主鍵,則實體框架會將所有內容視爲主鍵,因此您將無法對錶進行更改。你需要做的是,在表中定義一個主鍵,從模型瀏覽器中刪除模型中的表格,然後在模型中重新添加表格。這一定會解決它。快樂的編碼。乾杯!

相關問題