我有以下的方法,我試圖用它來阻止人們改變querystring
,以查看其他人的詳細信息:忽略equals上IEquatable
public static bool IsCurrentUserAuthorisedVessel(HttpRequest request)
{
Guid currentUser = GetCurrentUserId();
PersonRepository repo = new PersonRepository();
VesselRepository vesselRepo = new VesselRepository();
Person currentPerson = repo.GetPersonByUser(currentUser);
int qs = int.Parse(request.QueryString["VesselId"]);
Vessel currentVessel = vesselRepo.GetVessel(qs);
if (!String.IsNullOrEmpty(request.QueryString["VesselId"]))
{
if (IsCurrentUserAdmin())
{
return true; //Always return true for admin
}
else
{
if (currentPerson.Vessels.Contains(currentVessel))
{
return true;
}
else
return false;
}
}
return true;
}
在我目前正在調試currentPerson.Vessels
產量3只船的例子在Icollection<Vessel>
其中之一有一個VesselId
是6,這也恰好是currentVessel
的VesselId,但是匹配失敗,方法返回false
。
我已經對類似的SO問題和MSDN文檔做了一些閱讀,我對這裏發生的事情的理解是因爲在ICollection中具有6的ID的船隻是我試圖匹配的currentVessel的不同實例,該參考導致不相等,並且與平等規則不是基於ID有關。
我的Person
模型包含public virtual ICollection<Vessel> Vessels { get; set; }
這是否意味着我必須在我的Vessel
模型上實現IEquatable
接口,然後重寫Equals方法。
我希望我自己的自定義規則基於id在這種情況下相等。我如何覆蓋這個方法?
請添加您正在使用的ORM(Entity Framework,NHibernate等)的標籤。 – 2014-11-04 14:36:36