-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Contains function not working
PostPosted: Thu Jul 26, 2007 9:51 am 
Newbie

Joined: Wed Jul 25, 2007 10:53 am
Posts: 7
Hi

I was wondering if someone could tell me why when I use the Contains method which is defined as part of the IList<T> interface of my lazy collection, it can't find the item I'm looking for even if it's in the list. I info on how to solve this would be appreciated.

Thanking you in advance
Francis

Here's the output from my test case.

q1.Id : 1
q1.Text : What?
q1.GetHashCode() : 1539


quiz.Name : Quiz 1 (UpdatedYdaniel)

q.Id : 1
q.Text : What?
q.GetHashCode() : 1539

== : True
con : False <------------------------------------------- This is the problem

Here's the test case code

Question q1 = Question.GetById(1);

Response.Write("q1.Id : " + q1.Id + "<br />");
Response.Write("q1.Text : " + q1.Text + "<br />");
Response.Write("q1.GetHashCode() : " + q1.GetHashCode() + "<br />");

Response.Write("<br />");
Response.Write("<br />");

Quiz quiz = Quiz.GetById(1);

Response.Write("quiz.Name : " + quiz.Name + "<br />");
Response.Write("<br />");

foreach(Question q in quiz.Questions)
{
Response.Write("q.Id : " + q.Id + "<br />");
Response.Write("q.Text : " + q.Text + "<br />");
Response.Write("q.GetHashCode() : " + q.GetHashCode() + "<br />");
Response.Write("<br />");

bool result = q1 == q;
//bool result = 1 == 2;
bool con = quiz.Questions.Contains(q1);

Response.Write("== : " + result + "<br />");
Response.Write("con : " + con + "<br />");
}


Here's are my domain classes

/*
using MyGeneration/Template/NHibernate (c) by lujan99@usa.net
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;

//using Econcordia.Quiz.Test;

namespace Econcordia.Quiz
{
/// <summary>
/// Quiz object for NHibernate mapped table 'Quizzes'.
/// </summary>
[Serializable]
public partial class Quiz : INotifyPropertyChanged
{
#region Member Variables
protected long _id;
protected string _name;
// works
protected IList<Question> _questions;
// works
//protected IQuestionList _questions;

//protected IList _questions = new QuestionList();
public event PropertyChangedEventHandler PropertyChanged;

#endregion
#region Constructors

public Quiz() {}

public Quiz(string name)
{
this._name= name;
}

#endregion
#region Public Properties
public virtual long Id
{
get { return _id; }
set {if (value != this._id){_id= value;NotifyPropertyChanged("Id");}}
}
public virtual string Name
{
get { return _name; }
set {
if ( value != null && value.Length > 255)
throw new ArgumentOutOfRangeException("value", value.ToString(), "Name cannot contain more than 255 characters");
if (value != this._name){_name= value;NotifyPropertyChanged("Name");}}
}

// works
public virtual IList<Question> Questions
{
get { return _questions; }
set { _questions = value; }
}
//works

//public virtual IQuestionList Questions
//{
// get { return _questions; }
// set { _questions = value; }
//}

protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}

#endregion

#region Equals And HashCode Overrides
/// <summary>
/// local implementation of Equals based on unique value members
/// </summary>
public override bool Equals( object obj )
{
if( this == obj ) return true;
if( ( obj == null ) || ( obj.GetType() != this.GetType() ) ) return false;
Quiz castObj = (Quiz)obj;
return ( castObj != null ) &&
this._id == castObj.Id;
}
/// <summary>
/// local implementation of GetHashCode based on unique value members
/// </summary>
public override int GetHashCode()
{
int hash = 57;
hash = 27 * hash * _id.GetHashCode();
return hash;
}
#endregion

}
}

/*
using MyGeneration/Template/NHibernate (c) by lujan99@usa.net
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;

namespace Econcordia.Quiz
{
/// <summary>
/// Question object for NHibernate mapped table 'Questions'.
/// </summary>
[Serializable]
public partial class Question : INotifyPropertyChanged
{
#region Member Variables
protected long _id;
protected string _text;
protected IList<Quiz> _quizzes;
public event PropertyChangedEventHandler PropertyChanged;

#endregion
#region Constructors

public Question() {}

public Question(string text)
{
this._text= text;
}

#endregion
#region Public Properties
public virtual long Id
{
get { return _id; }
set {if (value != this._id){_id= value;NotifyPropertyChanged("Id");}}
}
public virtual string Text
{
get { return _text; }
set {
if ( value != null && value.Length > 255)
throw new ArgumentOutOfRangeException("value", value.ToString(), "Text cannot contain more than 255 characters");
if (value != this._text){_text= value;NotifyPropertyChanged("Text");}}
}
public virtual IList<Quiz> Quizzes
{
get { return _quizzes; }
set {_quizzes= value; }
}
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}

#endregion

#region Equals And HashCode Overrides
/// <summary>
/// local implementation of Equals based on unique value members
/// </summary>
public override bool Equals( object obj )
{
if( this == obj ) return true;
if( ( obj == null ) || ( obj.GetType() != this.GetType() ) ) return false;
Question castObj = (Question)obj;
return ( castObj != null ) &&
this._id == castObj.Id;
}
/// <summary>
/// local implementation of GetHashCode based on unique value members
/// </summary>
public override int GetHashCode()
{
int hash = 57;
hash = 27 * hash * _id.GetHashCode();
return hash;
}
#endregion

}
}

Here are my mapping files

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<!--Build: with lujan99@usa.net Nhibernate template-->
<class name="Econcordia.Quiz.Question,Econcordia.Quiz" table="Questions" lazy="true">
<id name="Id" column="id" type="long">
<generator class="native" />
</id>
<property name="Text" column="text" type="string" />
<bag name="Quizzes" inverse="false" table="Quiz_Question" lazy="true" cascade="delete">
<key column="question_id" />
<many-to-many class="Econcordia.Quiz.Quiz,Econcordia.Quiz">
<column name="quiz_id" />
</many-to-many>
</bag>
</class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<!--Build: with lujan99@usa.net Nhibernate template-->
<class name="Econcordia.Quiz.Quiz,Econcordia.Quiz" table="Quizzes" lazy="true">
<id name="Id" column="id" type="long">
<generator class="native" />
</id>
<property name="Name" column="name" type="string" />
<bag


name="Questions" inverse="false" table="Quiz_Question" lazy="true" cascade="delete">
<key column="quiz_id" />
<many-to-many class="Econcordia.Quiz.Question,Econcordia.Quiz">
<column name="question_id" />
</many-to-many>
</bag>
</class>
</hibernate-mapping>


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.