MVC4 EF外键关联导致无效的ModelState

时间:2013-07-09 13:10:44

标签: entity-framework asp.net-mvc-4 foreign-key-relationship

使用EF和MVC4可以指定模型中包含外键列。虽然这通常不是 OR 建模的一部分,但是当您使用MVC controller with read/write actions and views, using Entity Framework选项生成控制器时,它允许MVC4自动生成带有下拉列表的视图,用于外键关系。

在这种情况下,我遇到了创建对象的问题。

大大简化,所讨论的模型是:

问卷

  • 问卷ID:PK
  • CandidateId:FK
  • 候选人:相关对象

候选:

  • 候选人ID:PK
  • 名称:字符串

我遇到的问题是在创建视图后回复以创建新问卷ModelState.IsValid是错误的。在调查时,列出的错误是The parameter conversion from type 'System.String' to type 'Data.Candidate' failed because no type converter can convert between these types.

ModelState.Keys包括Questionnaire.Candidate以及Questionnaire.CandidateId(有效)。

我确信这很简单,但我想听听一些解决方案。 viewbag只有一个下拉列表集,视图的@model类型为@model Data.Questionnaire。没有绑定到Questionnaire.Candidate.的编辑器字段。

1 个答案:

答案 0 :(得分:0)

由于我不知道为什么内置EF模型不喜欢MVC生成的脚手架,对于启用了外键列的创建回发,我已经恢复到更安全的解决方案(仍然很高兴听到它失败的原因)外的所述盒):

为特定敏感操作(如create

)创建单独的视图模型

该理论认为使用EF域实体作为视图模型存在许多问题,包括:

  • 他们可能会泄露太多信息或允许回发其他字段
  • 验证文本是一个接口问题,不应该是数据模型的一部分(他们实际上建议甚至视图模型不是这个文本的地方,但我离题了。)

所以基本上我现在有一个CreateCandidateQuestionnaireVM类,只有必要的字段来为新实例选择合适的值。