モデル クラス内では、次のように 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;
}
それ以外の場合、インデックス ビューの各レコードは、子レコードがあるかどうかを確認するために、DB に対して最大 3 つのクエリを実行する可能性があります。したがって、削除リンクを非表示/表示するという要件を実装するためだけに、上記のようにすべてのナビゲーション プロパティを含めることになりました。ナビゲーション プロパティ データ (tmsrouter、tmsfirewalls、zonea) を表示する必要がないため、ロジックを管理するためのより良い方法はありますか? ありがとう