Asp.net mvc EF联接和MVC视图

Asp.net mvc EF联接和MVC视图,asp.net-mvc,entity-framework,asp.net-mvc-3,razor,Asp.net Mvc,Entity Framework,Asp.net Mvc 3,Razor,我有几个表,它们的关系基于唯一的键约束 一个简单的例子是: VersionId,VersionName SurveyId、SurveyName、VersionId QuestionId、QuestionName、SurveyId、VersionId EF当前不支持基于唯一键约束的关系。在我的问题索引视图中,处理“连接到调查”以显示带有调查名称的问题网格的最佳方式是什么 我需要匿名类型吗?db.Questions.IncludeSurveys似乎什么都没做。我可以使用linq为连接的表创建一个Vi

我有几个表,它们的关系基于唯一的键约束

一个简单的例子是:

VersionId,VersionName SurveyId、SurveyName、VersionId QuestionId、QuestionName、SurveyId、VersionId

EF当前不支持基于唯一键约束的关系。在我的问题索引视图中,处理“连接到调查”以显示带有调查名称的问题网格的最佳方式是什么


我需要匿名类型吗?db.Questions.IncludeSurveys似乎什么都没做。我可以使用linq为连接的表创建一个ViewModel,我想这是一个不错的方法,但是EF&MVC中有很多东西,我想在做任何事情之前我都会检查一下。

为什么在调查表和问题表中都有一个指向VersionID的链接?你不能通过调查得出问题的答案吗


此外,如果问题和调查之间的关系是多对一或一对一,那么每个问题只有一个调查,那么它应该是db.Questions.IncludeSurvey-非复数。

首先,razors视图中没有连接或几乎任何其他逻辑。控制器是构建ViewModel的地方,视图是表示ViewModel的方法。正如您所提到的,为其制作ViewModel是唯一正确的方法。您可以用任何方法填充viewmodel—linq是创建关联数据的绝对正常的方法。如果您想更进一步,您应该将连接逻辑放在某种类型的存储库中,例如QuestionRepository,而不是controller中

为什么版本是问题的一个简单答案是,还有其他表依赖于链接到问题的版本。为了确保(比如说)response是问题的适当版本,我需要问题表本身的版本。使用Include for anything时,我不会获得结果实体的其他属性。。。我怀疑这是因为实体框架不知道唯一键约束,所以它跳过/忽略基于它们的外键。我有复合键来确保数据库本身中的引用约束。你的问题让我对相关数据进行了EF关联。它就像一个冠军!然后我不得不刷新我的模式,我在想。。。在数据库中,冗余关系不会受到影响,所以我添加了一组关系,只在单个键上连接,而不是在复合键和BAM上连接,所有内容都与EF连接。感谢您的启发:-啊,问题库不是控制器,我喜欢:-我一直在尽最大努力将与实体相关的所有逻辑保留在其关联的控制器中。。。