关于MVC和实体框架的一个非常新手的问题(使用数据驱动开发)。
我在现有数据库中构建了EF模型。我在Visual Studio中使用EF向导/工具,将其指向我的数据库,并创建了所有实体类和关系。
假设它是一个简单的数据库,它有两个表和以下列:
Table 1
uid (pk)
name
description
Table 2
id (pk)
uid (fk to Table 1)
class
我想要一个显示表2的视图/页面,而不是uid,显示表1中的名称。
现在,我的控制器只是将Table2实体模型传递给视图,但很明显,它不包含uid的交叉引用值。
我是否需要为此创建单独的视图模型?如果是这样,我会加入什么? 或者,我可以扩展EF生成的实体模型以某种方式包含Table1的相关值吗?
答案 0 :(得分:2)
你应该发现自己在很大程度上依赖于视图模型 - 你很少需要所有给定实体的属性(表格的单元格) - 没有或多或少。 Viewmodels为您提供了该功能 - 能够为给定视图提供所需的属性。
无论您是否正在使用视图模型,因为表之间有外键,您无需执行任何特殊操作即可从两者中获取数据。正如我在评论中所说,我需要看到你的控制器,以确保传递给视图的模型包含你需要的所有数据。
在您看来,您会在页面顶部引用您的模型,就像这样......
@model yourprojectnamespace.yourentitynametable1forinstance
然后,您将能够像这样引用模型中的项目,
@Model.table1item
你也可以像这样引用其他表中的属性......
@Model.table1.table2.table2item
答案 1 :(得分:1)
您应该使用viewmodel将数据传递给view。
您只能移动所需的属性
What is ViewModel in MVC?
WebApi Controller returned value in Entity Framework 5 and MVC 4 project
您可以添加其他/自定义验证规则来查看模型