如何使用Entity Framework和视图模型显示交叉引用值

时间:2014-05-10 01:16:40

标签: .net asp.net-mvc entity-framework asp.net-mvc-4

关于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的相关值吗?

2 个答案:

答案 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
您可以添加其他/自定义验证规则来查看模型