2012-06-18 44 views
2

我又遇到了與實體框架唷問題....更新外鍵採用實體框架

我試圖用一個外鍵更新表,

我有問題,插入但通過編輯edmx文件進行排序。

我使用下面的代碼來更新其擁有的角色表的外關係User表,

Domain.Data.Role role = db.Role.FirstOrDefault(r => r.RoleName == user.Role); 

Domain.Data.User data = db.User.Where(u => u.UserName == username).First(); 

data.Pass = user.Password.Encrypt(); 
data.CreatedBy = Login.User.Encrypt(); 
data.DtCreated = DateTime.Now; 

//data.Role = role; 

data.Role = (from r in db.Role 
       where r.RoleName == user.Role 
       select r).First(); 

db.SaveChanges(); 

在更新,我收到以下異常,

參照完整性約束衝突發生:當對象具有非臨時密鑰時,屬於參照完整性約束的屬性無法更改。

任何反饋將是非常有幫助的。

問候,

審計局

回答

0

我不知道,但你可能要檢查您是否已經勾選創建/在設計更新模型時,「在模型中包含外鍵列」 。如果您勾選了,您可能會發現設置對象不夠,您可能還需要設置標識或僅設置標識。

例如。您可能需要這樣做:

data.RoleId = role.RoleId; 

與設置對象或代替設置對象一起使用。

就個人而言,我不打勾「在模型中包含外鍵列」,因爲它引起我各種令人頭痛的問題,我不記得那是一年或更久以前的事。這有時候是一種痛苦,因爲能夠通過使用Id來過濾/搜索/更新是很好的事情,但是我已經學會了沒有這樣的生活,以避免諸如您遇到的煩惱。