0

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

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

大大简化,有问题的模型是:

问卷:

  • 问卷编号:PK
  • 候选人编号: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(这是有效的)。

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

4

1 回答 1

0

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

为特定的敏感操作(如创建)创建单独的视图模型

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

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

所以基本上我现在有一个 CreateCandidateQuestionnaireVM 类,其中只有为新实例选择适当值所需的字段。

于 2013-07-09T14:46:59.250 回答