【发布时间】:2014-12-31 11:45:36
【问题描述】:
我尝试使用以下方法阻止人们更改 querystring 以查看其他人的详细信息:
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 在 Icollection<Vessel> 中生成 3 个容器,其中一个容器的 VesselId 为 6,这也恰好是 currentVessel 的 VesselId 但是匹配失败并且方法正在返回false。
我已经阅读了类似的 SO 问题和 MSDN 文档,我对这里发生的事情的理解是因为 ICollection 中 ID 为 6 的 Vessel 是我尝试匹配的 currentVessel 的不同实例,引用导致不相等,与相等规则有关的事情不是基于 ID。
我的Person 模型包含public virtual ICollection<Vessel> Vessels { get; set; } 这是否意味着我必须在我的Vessel 模型上实现IEquatable 接口,然后重写Equals 方法。
在这种情况下,我想要我自己的基于 id 的自定义规则来实现平等。如何覆盖此方法?
【问题讨论】:
-
请添加您正在使用的ORM(实体框架、NHibernate等)的标签。
标签: c# .net entity-framework