Entity framework MVC4 EF外键关联导致ModelState无效
通过将EF与MVC4一起使用,可以指定在模型中包含外键列。虽然这通常不是建模的一部分,但它确实允许MVC4在使用实体框架选项生成带有读/写操作和视图的Entity framework MVC4 EF外键关联导致ModelState无效,entity-framework,asp.net-mvc-4,foreign-key-relationship,Entity Framework,Asp.net Mvc 4,Foreign Key Relationship,通过将EF与MVC4一起使用,可以指定在模型中包含外键列。虽然这通常不是建模的一部分,但它确实允许MVC4在使用实体框架选项生成带有读/写操作和视图的MVC控制器时,为外键关系自动生成带有下拉列表的视图 在这个场景中,我遇到了创建对象的问题 经过极大简化,所讨论的模型包括: 调查问卷: 问题奈里德:PK 候选人编号:FK 候选对象:关联对象 候选人: 候选ID:PK 名称:string 我遇到的问题是,在创建视图的帖子中,创建新问卷的ModelState.IsValid为false。在调
MVC控制器时,为外键关系自动生成带有下拉列表的视图
在这个场景中,我遇到了创建对象的问题
经过极大简化,所讨论的模型包括:
调查问卷:
- 问题奈里德:PK
- 候选人编号:FK
- 候选对象:关联对象
候选人:
- 候选ID:PK
- 名称:string
我遇到的问题是,在创建视图的帖子中,创建新问卷的ModelState.IsValid
为false。在调查中,列出的错误是从类型“System.String”到类型“Data.Candidate”的参数转换失败,因为没有类型转换器可以在这些类型之间转换。
ModelState.key包括调查问卷.Candidate
以及调查问卷.CandidateId
(有效)
我相信这很简单,但我想听听一些解决办法。viewbag仅为下拉列表设置了一个集合,并且该视图具有类型为@model Data.questionly
的@model。由于我不知道为什么内置EF模型不喜欢MVC生成的脚手架,对于启用外键列的创建回发,我已经返回到一个更安全的解决方案(仍然很高兴听到为什么它会失败):
为特定的敏感操作(如创建)创建单个视图模型
该理论认为,使用EF域实体作为视图模型存在许多问题,包括:
- 它们可能会暴露太多的信息或允许其他字段被发回
- 验证文本是一个界面问题,不应该是数据模型的一部分(他们实际上建议,即使viewmodel也不是本文的位置,但我离题了)
因此,基本上我现在有一个CreateCandidateQuestionnaireVM类,它只包含为新实例选择适当值所需的字段