【发布时间】:2009-11-11 02:27:33
【问题描述】:
我的应用程序构造一个 Linq To Sql 查询,然后填充一个模型,然后将其传递给视图。然后视图访问 IEnumerable 对象(从 Linq 到 Sql 查询)以显示用户界面。我遇到的问题是,每次视图从模型访问 IEnumerable 对象时,都会进行 linq to sql 数据库查询。我希望数据库被查询一次。
我的控制器如下所示:
IQueryable<Item> items = (from item in db.Items
orderby item.Name ascending
select item);
ItemModel m = new ItemModel(items);
return View("Index", m);
ItemModel 的定义如下:
public class ItemModel
{
public ItemModel(IEnumerable<Item> items)
{
this.Items = items;
}
public IEnumerable<Item> Items { get; private set; }
}
我的视图然后做这样的事情
Item Count: <%= Html.Encode(Model.Items.Count())%>
<% foreach (var item in Model.Items) { %>
<% Html.RenderPartial("ItemControl", item); %>
<% } %>
每当在视图中访问 Model.Items 时,我都会看到一个数据库查询。在上面的示例中,我会看到两个 Model.Items 调用的两个数据库查询(在实际视图中 Model.Items 被访问两次以上,因此性能损失要差得多)。
我应该如何重组我的视图、模型或控制器以只对数据库进行一次查询?
【问题讨论】:
标签: c# asp.net-mvc linq-to-sql model-view-controller