实体框架4 - 检查导航属性集合是否为空,没有Include()或Load()

时间:2010-09-28 04:49:11

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

在MVC视图中,我正在寻找一种方法来确定父实体的子实体集合是否为空,因此我可以决定是否需要调用RenderPartial()。

对于一对一,我一直在使用以下内容:

<% if (Model.Book.GenreReference.EntityKey != null) %>
     {.....}

但我不确定如何在一对多方案中执行此操作,或者如果它甚至可以 完成而不使用Include()或Load()。

2 个答案:

答案 0 :(得分:2)

写一个视图模型:

public class BookPresentation
{
    public Guid Id { get; set; }
    public string Title { get; set; }
    public bool HasOrders { get; set; }
    public int ReviewCount { get; set; }
}

然后project到它上面:

var model = from b in db.Books
            where b.Id == id
            select new BookPresentation
            {
                Id = b.Id,
                Title = b.Title,
                HasOrders = b.Orders.Any(),
                ReviewCount = b.Reviews.Count()
            };

答案 1 :(得分:0)

首先,在将模型传递给视图时,您确实应该从数据库加载所有数据。鉴于此,您应该在查询中使用Include(或之后使用Load)来获取控制器操作中的子集合。

在视图中,您可以进行常规检查(某些内容):

<% if (Model.Book.Children != null && Model.Book.Children.Any()) %>

(而不是Children您实际使用的是您拥有的导航属性 - 例如可能是Authors