Asp.net 我是否需要ViewModel将一对多数据带到视图中?

Asp.net 我是否需要ViewModel将一对多数据带到视图中?,asp.net,entity-framework-4,asp.net-mvc-3,Asp.net,Entity Framework 4,Asp.net Mvc 3,这可能是最基本的东西,但我在任何地方都找不到明确的答案 假设我正在使用实体框架(EF4)开发一个MVC(3)应用程序,我有以下三个类: public class Foo { public int FooID public Bar Bar public ICollection<Baz> Bazes } public class Bar { public int BarID public string BarText } public clas

这可能是最基本的东西,但我在任何地方都找不到明确的答案

假设我正在使用实体框架(EF4)开发一个MVC(3)应用程序,我有以下三个类:

public class Foo
{
    public int FooID
    public Bar Bar
    public ICollection<Baz> Bazes
}

public class Bar
{
    public int BarID
    public string BarText
}

public class Baz
{
    public int BazID
    public Foo Foo
}
公共类Foo
{
公共整数FooID
公共酒吧
公共集市
}
公共类酒吧
{
公共国际巴里德酒店
公共字符串
}
公共类Baz
{
巴齐德公共酒店
公共福福
}
最好的方法是什么,将所有的Foo与相关的酒吧Baz结合起来,这样我就可以循环浏览Foo并利用相关的物品?我需要制作ViewModel吗?它应该包含什么

我想要的结局是

@model = IEnumerable<Foo/FooViewModel>

foreach(var foo in model)
{
  @if(foo.Bar.BarID == 1)
  {
    foreach(var baz in foo)
    {
      @baz.BazID
    }
  }
}
@model=IEnumerable
foreach(模型中的var foo)
{
@如果(foo.Bar.BarID==1)
{
foreach(foo中的var baz)
{
@baz.BazID
}
}
}

您并不特别需要视图模型。您可以将EF对象直接传递到视图,在简单的CRUD情况下也可以。以我的经验来说,它从来就不是那么简单的积垢

我通常需要从许多地方获取数据,这些数据并非全部包含在一个对象中。例如,我可能希望根据个人在系统中的角色显示/隐藏数据。福可能不知道。另一个例子是带有dropdownlist的表单。你需要把这些信息传递到某个地方。再说一次,富可能不知道应该有什么选择

我会为每个类创建一个视图模型,然后使用AutoMapper将域模型映射到视图模型

您的视图模型如下所示:

public class FooView{
    public BarView Bar { get; set;}
    public ICollection<BazView> Bazes { get; set;}
}

public class BarView{
    public int BarID { get; set; }
    public BazView Baz { get; set; }
}

public class BazView {
    public int BazID { get; set; }
}
公共类视图{
公共BarView栏{get;set;}
公共ICollection Bazes{get;set;}
}
公共类BarView{
公共int BarID{get;set;}
公共视图Baz{get;set;}
}
公共类视图{
public int BazID{get;set;}
}
您的操作方法将包含以下内容:

var foos = fooRepository.GetFoos();
var model = Mapper.Map<IEnumerable<Foo>,IEnumerable<FooView>>(myFoos);
return View(model);
var foos=fooRepository.GetFoos();
var model=Mapper.Map(myFoos);
返回视图(模型);

您能否提供更多有关视图外观的详细信息。这是一个潜在的递归对象层次结构。好的,问题已更新,希望更清楚!)谢谢你的回答。看起来这个模型比我预期的要大一点,但它似乎是有效的!我越是关注MVC,它就越像MVVMC,是否有人只使用模型、视图和控制器?谢谢again@NiclasLindqvist您可以只使用您的EF模型,这对于简单的CRUD应用程序来说通常很好。我的经验是,它永远不会只是积垢。我编辑了我的答案,并详细介绍了我为什么使用视图模型。HTH@Brian不,你是对的,它从来就不是积垢。我会读到更多关于自动映射和所有这些的内容,但是谢谢你的帮助。@Brian。。BarView如何包含多个Baz?从我可以告诉你的视图模型,一个BarView有一个BazView,但我想在每个Foo(以及每个Bar)上有多个Baz,有什么想法吗?@Niclas Lindqvist你只对在这个视图上显示Baz感兴趣吗?我以为你不是,因为你把食物/酒吧递给它。但是,在进一步研究这个问题之后,您似乎只是在使用foo/bar来过滤baz'es。如果你对显示任何foo/bar信息不感兴趣,我会更新答案,告诉你我会怎么做。