ASP.NET MVC3和实体框架 - 一个视图中的一对多关系

时间:2012-01-16 12:49:53

标签: c# entity-framework

我正在学习MVC 3并且我遇到了一件事。

我的模型中有两个表(图库和图像)。这些表格与GalleryId相关(一对多)(1个图库 - 许多图像)。

在画廊 - >详细信息视图我想插入图库详细信息(这很简单)还有一件事 - 来自此图库的图像列表。我不知道该怎么做。 以下是此模型中的类:

public partial class Gallery
{
    public Gallery()
    {
        this.Images = new HashSet<Image>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Password { get; set; }
    public System.DateTime CreatedOn { get; set; }

    public virtual ICollection<Image> Images { get; set; }
}
public partial class Image
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string FileName { get; set; }
    public int GalleryId { get; set; }
    public System.DateTime UploadedOn { get; set; }

    public virtual Gallery Gallery { get; set; }
}
 public partial class MyEntities : DbContext
{

    public DbSet<Gallery> Galleries { get; set; }
    public DbSet<Image> Images { get; set; }
}

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

在详情视图中,您使用图库作为模型(在控制器中返回所需的图库return ActionResult View(service.GetGallery(id));

在视图中你有一个循环:

@foreach (var item in Model.Images.Select((model, index) => new { index, model }))
{
    <div>@(item.index). @item.model.Name </div>
}

答案 1 :(得分:1)

最简单的方法是在您传递给详细信息视图的模型中传递它。

public ActionResult Details(int id)
{
     var item = //get gallery item from database

     item.ImagesReference.Load();

     return View(item);
}

在您看来,您可以执行以下操作:

<ul>
    <%: if (Model.Images != null) foreach(var item in Model.Images) { %>
         <li> <%: item.Name %> </li> 
    <% } %>
</ul>

您也可以通过ViewData传递一个列表,但我认为在模型中传递它是比较整洁的,因为它不需要设置任何其他变量,EF会在模型中为您执行此操作。

注意:我键入的某些名称可能已关闭,但Intellisense会为您提供正确的名称,因为EF已生成这些对象。我希望你理解我试图解释的基本想法: - )