Asp.net mvc MVC数据设计决策

Asp.net mvc MVC数据设计决策,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,我目前正在开始设计MVC应用程序 在通过原型运行一些测试时,我遇到了一些数据处理方式的问题 这里有一个简单的例子 在处理原型时,我注意到,当实体框架从SQL构建所有必需的模型时,它会创建一个从Employee_表到Job_Position_Link_表的ICollection关系。如果视图强类型化到Employee_表,我无法直接访问Job_Position_Link_表中的属性。此外,我也无法进入工作、职位、头衔表。我研究了如何为这个问题创建ViewModel,但是没有找到一个关于如何在使用I

我目前正在开始设计MVC应用程序

在通过原型运行一些测试时,我遇到了一些数据处理方式的问题

这里有一个简单的例子

在处理原型时,我注意到,当实体框架从SQL构建所有必需的模型时,它会创建一个从Employee_表到Job_Position_Link_表的ICollection关系。如果视图强类型化到Employee_表,我无法直接访问Job_Position_Link_表中的属性。此外,我也无法进入工作、职位、头衔表。我研究了如何为这个问题创建ViewModel,但是没有找到一个关于如何在使用ICollection时创建ViewModel的好教程。大多数教程都来自代码优先的方法,我正在处理一个继承的数据库

我考虑的另一个解决方案是用SQL创建所有视图,然后将它们传递到MVC中


我还是MVC新手,只是想知道在这种情况下最好的做法是什么

永远不要将视图绑定到EF实体。相反,创建具有所需属性的视图模型类,并将EF实体转换为这些VM。您可以手动或在自动映射器的帮助下进行转换。然后,可以将视图绑定到视图模型


控制器的任务是构建视图模型并将其发送到视图引擎进行渲染。因此,视图必须期望有一个视图模型可以显示

最好是创建一个ViewModel,实体框架在其中创建一个ICollection?现在,当尝试从ICollection AtelementTint访问任何内容时,总是抛出空引用异常。对于联接集合,我将编写一个EF联接查询并返回一个自定义数据协定IEnumerable。将EF实体保留在.Data层中,并使您的方法返回自定义创建的实体—有些称之为DTO,有些称之为数据契约—谢谢。我想这会让我走上正轨。非常感谢。我刚刚发现我以前的ViewModel有什么问题。我将我的ViewModel视为我的一个常规型号的精简版。因此,取而代之的是从表中选择全部15列,我的ViewModel只用于选择5列。我只是忘记了将其他模型中的其他属性包含到ViewModel中,然后在控制器中将它们连接在一起。