MSD,

You decided to repost the solution I suggested to you on the earlier
topic: 
http://groups.google.com/group/nhusers/browse_thread/thread/1d2319f44fd5d7ab?hl=en#
as a different topic instead of continuing with the previous
discussion. You will make it difficult other people including myself
who were following the previous discussion to benefit from the
contribution from the community on the topic.

Apparently you have properly implemented the mappings.

Jide

On Aug 16, 1:33 pm, Fabio Maulo <[email protected]> wrote:
> various causes:
> 1) your id (native) is unique in a class hierarchy (you have Employee#1 and
> Student#1)
> 2) you are using the same column (EntityID) for both reference in a
> table-per-class-hierarchy
> 3) you are lucky; have a look to FKs created for EntityID column
>
> Solution:
> use two different column-name for the relation
>
>
>
>
>
> On Mon, Aug 16, 2010 at 9:23 AM, MSD <[email protected]> wrote:
> > I have the following classes:
> > public enum ContactValueType : short {...}
> > public abstract class ContactDetail
> > {
> >    public int ID { get; protected set; }
> >    public virtual ContactValueType ValueType { get; protected set; }
> >    public virtual string Value { get; protected set; }
>
> >    public ContactDetail(){}
> >    public ContactDetail(ContactValueType valueType, string value)
> >    {
> >        this.ValueType = valueType;
> >        this.Value = value;
> >    }
> > }
> > public class StudentContactDetail : ContactDetail
> > {
> >    public virtual Student Student { get; set; }
> >    public StudentContactDetail(){}
> >    public StudentContactDetail(Student student, ContactValueType
> > valueType, string value) : base(valueType, value)
> >    {
> >        this.Student = student;
> >    }
> > }
> > public class EmployeeContactDetail : ContactDetail
> > {
> >    public virtual Employee Employee { get; set; }
> >    public EmployeeContactDetail(){}
> >    public EmployeeContactDetail(Employee employee, ContactValueType
> > valueType, string value) : base(valueType, value)
> >    {
> >        this.Employee = employee;
> >    }
> > }
>
> > public class Employee
> > {
> >    public int ID { get; protected set; }
> >    public virtual string Name { get; set; }
> >    public virtual
> > Iesi.Collections.Generic.ISet<EmployeeContactDetail> ContactDetails
> > { get; protected set; }
>
> >    protected Employee()
> >    {
> >        ContactDetails = new
> > Iesi.Collections.Generic.HashedSet<EmployeeContactDetail>();
> >    }
> >    public Employee(string name) : this()
> >    {
> >        this.Name = name;
> >    }
> > }
>
> > public class Student
> > {
> >    public int ID { get; protected set; }
> >    public virtual string Name { get; set; }
> >    public virtual Iesi.Collections.Generic.ISet<StudentContactDetail>
> > ContactDetails { get; protected set; }
>
> >    protected Student()
> >    {
> >        ContactDetails = new
> > Iesi.Collections.Generic.HashedSet<StudentContactDetail>();
> >    }
> >    public Student(string name): this()
> >    {
> >        this.Name = name;
> >    }
> > }
>
> > their tables:
>
> > ContactDetail
> >        ID int
> >        EntityType char(1)
> >        EntityID int
> >        ValueType smallint
> >        Value nvarchar(50)
> > Employee
> >        ID int
> >        Name nvarchar
> > Student
> >        ID int
> >        Name nvarchar
>
> > and their mappings:
>
> > <class name="ContactDetail" table="ContactDetail" lazy="false">
> >    <id name="ID" column="ID">
> >      <generator class="native"/>
> >    </id>
> >    <discriminator column="EntityType" type="String" />
> >    <property name="ValueType" column="ValueType"/>
> >    <property name="Value" column="Value"/>
> >    <subclass name="StudentContactDetail" discriminator-value="S">
> >      <many-to-one name="Student">
> >        <column name="EntityID" />
> >      </many-to-one>
> >    </subclass>
> >    <subclass name="EmployeeContactDetail" discriminator-value="E">
> >      <many-to-one name="Employee">
> >        <column name="EntityID" />
> >      </many-to-one>
> >    </subclass>
> >  </class>
>
> >  <class name="Student" table="Student" lazy="false">
> >    <id name="ID">
> >      <generator class="native"/>
> >    </id>
> >    <property name="Name">
> >      <column name="Name" length="50" not-null="true" />
> >    </property>
> >    <set name="ContactDetails" fetch="select" lazy="false"
> > cascade="all">
> >      <key column="EntityID" />
> >      <one-to-many class="StudentContactDetail" />
> >    </set>
> >  </class>
>
> >  <class name="Employee" table="Employee" lazy="false">
> >    <id name="ID">
> >      <generator class="native"/>
> >    </id>
> >    <property name="Name">
> >      <column name="Name" length="50" not-null="true" />
> >    </property>
> >    <set name="ContactDetails" fetch="select" lazy="false"
> > cascade="all">
> >      <key column="EntityID" />
> >      <one-to-many class="EmployeeContactDetail" />
> >    </set>
> >  </class>
>
> > When persisting Student and Employee instances all is fine, but when
> > loading them, their ContactDetails collection is populated by ALL
> > ContactDetails, that is disregarding the discriminator in the select
> > statement.
> > Why is that and what can I do aside from this:
>
> > <set name="ContactDetails" fetch="select" lazy="false" cascade="all"
> > where="EntityType='E'">
>
> > (adding the where attribute).
> > Thanks
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "nhusers" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<nhusers%[email protected]­>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/nhusers?hl=en.
>
> --
> Fabio Maulo- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to