I have this domain model:

[code]
public class Publication
{
     public virtual int Id { get; set; }
     public virtual IList<EquipmentAttr> EquipmentAttributes { get;
set; }
     public virtual IList<PublicationAttr> PublicationAttributes
{ set; get; }
}

public class EquipmentAttr : IndexationAttr
{
        public EquipmentAttr()
        {
        }

        public EquipmentAttr(string attrKey, string attrValue, string
attrType) : base(attrKey, attrValue, attrType)
        {
        }
}

public class PublicationAttr : IndexationAttr
{

       public PublicationAttr()
        {
        }

        public PublicationAttr(string attrKey, string attrValue,
string attrType) : base(attrKey, attrValue, attrType)
        {
        }
}

public abstract class IndexationAttr
{
        public virtual int Id { get; set; }
        public virtual int IndexationEntityId { get; set; }
        public virtual string AttrKey { get; set; }
        public virtual string AttrValue { get; set; }
        public virtual string AttrType { get; set; }

        public IndexationAttr()
        {
        }

        public IndexationAttr( string attrKey, string  attrValue,
string attrType)
        {
            AttrKey = attrKey;
            AttrValue = attrValue;
            AttrType = attrType;
        }

        public override bool Equals(object obj)
        {
            if (this.Id == ((IndexationAttr)obj).Id &&
                this.AttrKey == ((IndexationAttr)obj).AttrKey &&
                this.AttrValue == ((IndexationAttr)obj).AttrValue &&
                this.AttrType == ((IndexationAttr)obj).AttrType)
                return true;
            return false;
        }
}
[/code]

and this mappings:

[code]
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="property" default-lazy="true">
  <class xmlns="urn:nhibernate-mapping-2.2"
name="Buscador.Domain.com.clarin.entities.IndexationAttr,
Buscador.Domain" table="INDEX_ATTR_TABLE" abstract="true">
    <id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="ATTR_ID" />
      <generator class="identity" />
    </id>
    <discriminator type="String">
      <column name="ATTR_TYPE" />
    </discriminator>
    <property name="IndexationEntityId" type="System.Int32, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="INDEX_TABLE_ID" />
    </property>
    <property name="AttrKey" type="System.String, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="ATTR_KEY" />
    </property>
    <property name="AttrValue" type="System.String, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="ATTR_VALUE" />
    </property>
    <property name="AttrType" type="System.String, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="ATTR_VALUE_TYPE" />
    </property>
    <subclass name="Buscador.Domain.com.clarin.entities.EquipmentAttr,
Buscador.Domain" discriminator-value="EQUI" />
    <subclass
name="Buscador.Domain.com.clarin.entities.PublicationAttr,
Buscador.Domain" discriminator-value="PUBLI" />
  </class>
</hibernate-mapping>
[/code]

[code]
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="property" auto-import="true" default-cascade="none" default-
lazy="true">
  <class xmlns="urn:nhibernate-mapping-2.2" mutable="true"
name="Buscador.Domain.com.clarin.entities.Publication,
Buscador.Domain, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null" table="INDEX_TABLE">
    <id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="INDEX_ID" />
      <generator class="identity" />
    </id>
    <bag name="EquipmentAttributes">
      <key column="INDEX_TABLE_ID" />
      <one-to-many
class="Buscador.Domain.com.clarin.entities.EquipmentAttr,
Buscador.Domain" />
    </bag>
    <bag name="PublicationAttributes">
      <key column="INDEX_TABLE_ID" />
      <one-to-many
class="Buscador.Domain.com.clarin.entities.PublicationAttr,
Buscador.Domain" />
    </bag>
  </class>
</hibernate-mapping>
[/code]

Ok, so far.

Then, in a test:

[code]
var publication = _session.Get<Publication>(57);
var equipAtt = publication.EquipmentAttributes;
[/code]

When i inspect "equipAtt", it has ALL the IndexationAttributes. It
seems like NHibernate ignore "discriminator" field.

Here is the generated sql:

[code]
SELECT publicatio0_.INDEX_ID as INDEX1_1_0_, publicatio0_.INDEX_WEIGHT
as INDEX2_1_0_, publicatio0_.PUBLICATION_CONTACTS_QTY as
PUBLICAT3_1_0_, publicatio0_.PUBLICATION_DATE as PUBLICAT4_1_0_,
publicatio0_.PUBLICATION_DELETED as PUBLICAT5_1_0_,
publicatio0_.PUBLICATION_HIGHLIGHT as PUBLICAT6_1_0_,
publicatio0_.PUBLICATION_ID as PUBLICAT7_1_0_,
publicatio0_.PUBLICATION_SUBTITLE as PUBLICAT8_1_0_,
publicatio0_.PUBLICATION_TYPE as PUBLICAT9_1_0_,
publicatio0_.PUBLICATION_URL as PUBLICA10_1_0_,
publicatio0_.PUBLICATION_VISITOR_QTY as PUBLICA11_1_0_,
publicatio0_.VEHICLE_LOC_PART as VEHICLE12_1_0_,
publicatio0_.VEHICLE_LOC_PROV as VEHICLE13_1_0_,
publicatio0_.VEHICLE_LOC_LOC as VEHICLE14_1_0_,
publicatio0_.VEHICLE_COLOR as VEHICLE15_1_0_,
publicatio0_.VEHICLE_FIRST_OWNER as VEHICLE16_1_0_,
publicatio0_.VEHICLE_FUEL_TYPE as VEHICLE17_1_0_,
publicatio0_.VEHICLE_KM as VEHICLE18_1_0_, publicatio0_.VEHICLE_MAKE
as VEHICLE19_1_0_, publicatio0_.VEHICLE_MODEL as VEHICLE20_1_0_,
publicatio0_.VEHICLE_VERSION as VEHICLE21_1_0_,
publicatio0_.VEHICLE_PIC_QTY as VEHICLE22_1_0_,
publicatio0_.VEHICLE_PRICE as VEHICLE23_1_0_,
publicatio0_.VEHICLE_PRICE_CURRENCY as VEHICLE24_1_0_,
publicatio0_.VEHICLE_SEGMENT as VEHICLE25_1_0_,
publicatio0_.VEHICLE_STATUS as VEHICLE26_1_0_,
publicatio0_.VEHICLE_TYPE as VEHICLE27_1_0_, publicatio0_.VEHICLE_YEAR
as VEHICLE28_1_0_, publicatio0_.USER_UID as USER29_1_0_,
publicatio0_.USER_TYPE as USER30_1_0_ FROM INDEX_TABLE publicatio0_
WHERE publicatio0_.index_...@p0;@p0 = 57

SELECT equipmenta0_.INDEX_TABLE_ID as INDEX3_1_, equipmenta0_.ATTR_ID
as ATTR1_1_, equipmenta0_.ATTR_ID as ATTR1_0_0_,
equipmenta0_.INDEX_TABLE_ID as INDEX3_0_0_, equipmenta0_.ATTR_KEY as
ATTR4_0_0_, equipmenta0_.ATTR_VALUE as ATTR5_0_0_,
equipmenta0_.ATTR_VALUE_TYPE as ATTR6_0_0_ FROM INDEX_ATTR_TABLE
equipmenta0_ WHERE equipmenta0_.index_table_...@p0;@p0 = 57

[/code]

Obviously, i need that NHibernate only brings me the "equipment
attribute" in the list.

Thank you very much.

-- 
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