我有一个对象定义为这样:ICollection的<>包含在EF作为HashSet的失败
public class QuestionSetAssignee
{
[Required]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<QuestionSet> QuestionSets { get; set; }
public override int GetHashCode()
{
return Id.GetHashCode();
}
public override bool Equals(Object obj)
{
if (obj == null)
{
return false;
}
QuestionSetAssignee qsa = obj as QuestionSetAssignee;
return Id == qsa.Id;
}
}
以下语句:
QuestionSetAssignees.Contains(director)
在
public bool isEditable()
{
ApplicationDbContext db = new ApplicationDbContext();
QuestionSetAssignee director = db.QuestionSetAssignees.Find((int)QuestionSetAssigneeEnum.Director);
if (Conference.AcceptingDirectorApplications && QuestionSetAssignees.Contains(director))
{
return false;
}
return true;
}
返回false,据我所知,应该返回真实。 (注:Conference.AcceptingDirectorApplications返回true)
如果它不立即清除,导演对象和HashSet的对象来通过为DynamicProxies(由于EF和对象层次)。
这里是指挥目标:
这里是QuestionSetAssignees对象:
我无法控制QuestionSetAsignees的类型,因为它是由EF 6提供的(它在模型中声明为ICollection。这也意味着我无法提供一个比较对象(就我所知,据我所知)。我想要做的就是能够比较两个QuestionSetAsignee对象。我也尝试过实现IEquatable,但那不起作用。
你可以显示导致“QuestionSetAssignees.Contains(director)'调用的代码吗? –
@ScottChamberlain更新 –