在我的模型类中,我使用了一个方法调用 IsAlreadyAssigned,如下所示:-
public partial class DataCenter
{
public bool IsAlreadyAssigned()
{
return (TMSRacks.Any() || TMsRouters.Any() || Zones.Any());
}
}
这个辅助方法的主要目的是在对象有子记录时隐藏视图上的删除按钮;如下:-
<td>
@Html.ActionLink("Edit", "Edit", new { id= item.ID})
@if (!item.IsAlreadyAssigned())
{
<text>|</text>
@Ajax.ActionLink("Delete",
"Delete", "DataCenter",
new { id = item.ID },
new AjaxOptions
{
Confirm = "Are You sure You want to delete (" + item.Name + ")",
HttpMethod = "Post",
OnSuccess = "deletionconfirmation",
OnFailure = "deletionerror"
})
}
</td>
但是在一次显示 10 条记录的索引视图中,我将相应地隐藏或显示删除链接,因此我必须在查询中包含所有导航属性,如下所示:-
public IQueryable<DataCenter> AllFindDataCenters(string q, bool forautocomplete = false)
{
return from datacenter in tms.DataCenters.Where(a=> (String.IsNullOrEmpty(q)) || ( a.Name.ToUpper().StartsWith(q.ToUpper())))
.Include(a=>a.Zones)
.Include(a=>a.TMsRouters)
.Include(a=>a.TMSRacks)
select datacenter;
}
否则,我的索引视图上的每条记录最多可能对数据库进行三个查询,以检查是否有任何子记录。所以我最终包括了上面显示的所有导航属性,只是为了实现隐藏/显示删除链接的要求。那么有没有更好的方法来管理我的逻辑,因为我不需要显示任何导航属性数据(tmsrouter、tmsfirewalls、zonea),我只想知道是否存在至少一条记录?谢谢