2010-02-03 49 views
0

儘管在這裏有大量的帖子,但這一個讓我難倒了。ASP.MVC ModelBinding Behavior

該場景是一個簡單的CRUD操作的基本MVC(2)Web應用程序。每當編輯形式被提交和的UpdateModel()調用,則拋出異常:

System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException是由用戶代碼未處理

這發生針對一個DropDownList值,它是實體表上的外鍵。但是,表單上還有另一個DropDownList列表,表示另一個外鍵,它不會拋出錯誤(不出所料)。手動更改屬性值的編輯操作中:

Recipe recipe = repository.GetRecipe(int.Parse(formValues["recipeid"])); 
recipe.CategoryId = Convert.ToInt32(formValues["CategoryId"].ToString()); 
recipe.Page = int.Parse(formValues["Page"].ToString()); 
recipe.PublicationId=Convert.ToInt32(formValues["PublicationId"].ToString()); 

允許的CategoryId和頁面屬性進行更新,然後引發錯誤的PublicationId。所有的參照完整性在db和dbml中都是相同的。

任何光線都會受到歡迎。

+2

使用適當的視圖模型......^_^ – 2010-02-03 14:00:07

+0

我做的。這只是一些調試代碼來進入錯誤;) – OldBoy 2010-02-03 16:49:46

回答

2

這個錯誤與模型綁定沒有任何關係。相反,它與LINQ to SQL嚴格相關。你可以找到一個合理的解釋是什麼導致它in this post

+0

欣賞輸入Craig。我曾看過這篇文章,但無法調和兩個事實: 1.直到最近(在幾個月後我回到這個寵物項目 - 以及稍後的一些框架安裝),這工作得很好。 2. CategoryId更新正常。它也是一個FK約束,但我注意到EntityRef並沒有被創建,儘管有數據庫的限制 - 看起來像是在dbml創建中有些東西。 謝謝。 – OldBoy 2010-02-03 16:49:17

0

下面

更改您的代碼,而不是

recipe.CategoryId = Convert.ToInt32(formValues["CategoryId"].ToString()); 

寫這個

recipe.Category = db.GetCatById(formValues["CategoryID"]);