我正在努力学习mvc - 我提前为所有愚蠢的问题道歉。我所做的是创建一个基于现有数据库的mvc proejct,然后我一直在试图理解为我创建了什么,以及如何创建我自己的东西。不幸的是,因为我是一个新的stackoverflow用户,我无法发布我的项目结构的图片 我有一个父控制器和一个子控制器使用向导创建基于我模型中的2个单独的表。我想在一个视图中显示它们 - 最终在webgrid中,并且能够更改任何父项或子项的数据。你现在可以忽略CombinedController。我一直在做一些阅读,并且我已经知道我应该创建一个在模型级别结合父级和子级的视图模型,然后从那里开始。
所以我创建了这个类:
Imports System.Data.Objects.DataClasses
Public Class ParentAndChild
Public Property myChildren As IEnumerable(Of Child)
Public Property myParent as Parent
End Class
我有几个问题:
问题1 我是否必须将此ParentAndChild实体添加到.edmx文件中才能为其创建控制器和视图?我想我真正要问的是我是否必须首先在sql数据库中创建一个视图,让实体显示在.edmx然后创建一个控制器?或者我可以只在一个类中组合这两个实体?这就是我到目前为止所做的。我的数据库中没有结合这两个表的sql View。我问的原因是因为当我创建我的控制器时,如果我想免费获得所有CRUD,我必须使用实体框架创建。但我不知道要为数据上下文指定什么。
问题2
如果我想要一个webgrid以某种方式显示我的所有父母和他们所有的孩子,新的ParentAndChild课程会工作吗?我认为这只会显示一位父母及其子女的详细信息。我想我需要创建父母列表..然后在每个父母的父列表中添加一组模块。但我不知道该怎么做..
问题3
当我使用我的新类时,entityframework如何知道要返回哪些模块?我没有在任何地方定义关系...是因为在.edmx文件中,系统知道表之间的关系吗?
答案 0 :(得分:1)
如果您只需要访问父实体及其子实体的信息,您应该能够将您的视图发送给父实体。如果实体框架知道两个实体之间的关系,则ViewModel对此不是绝对必要的。如果数据库级别存在2个表之间的关系,则实体框架应该自动对其进行建模。
控制器的一个例子是:
public ActionResult Parent(int id)
{
var parent = context.Foo.Single(x => x.Id == id);
return View(parent);
}
如果您需要创建一个包含所有子实体的表,您可以执行以下操作:
@foreach(var item in Model.Children)
{
<td>@item.Property</td>
<td>@item.Property2</td>
}