2010-02-03 58 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"]);