3

I want to have Table per Type in one level and one Table for hierarchy in another level. Is it possible?

description is here ->

I have these classes:

public class BaseItem
{
   public int Id{ get; set; }
}
public class Item : BaseItem
{
}
public class Child1 : Item
{
}
public class Child2 : Item
{
}

I wanna have tables for "BaseItem" and "Item" and not for "Child1" and "Child2"

I try this mappings:

public class BaseItemMap : ClassMap<BaseItem>
{
    public BaseItemMap()
    {
        Id(p => p.Id).Column("BaseItemId");
    }
}
public class ItemMap : SubclassMap<Item>
{
   public Item()
   {
      KeyColumn("BaseItemId");

      //note: this line does not compiled 
      //      because "ItemMap" should be of "SubclassMap" and 
      //      I can not use "ClassMap"!
      DiscriminateSubClassesOnColumn("ItemType");
   }
}
public class Child1Map : SubclassMap<Child1>
{
    public BuildingNewsMap()
    {
        DiscriminatorValue(@"Child1");
    }
}
public class Child2Map : SubclassMap<Child2>
{
    public BuildingNewsMap()
    {
        DiscriminatorValue(@"Child2");
    }
}

help me please!

1 Answer 1

1

a bit awkward but does work. I included some properties to show the mapping of them

public class BaseItem
{
    public virtual int Id { get; protected set; }
    public virtual DateTime Created { get; set; }
}
public class Item : BaseItem
{
    public virtual string Name { get; set; }
}
public class Child1 : Item
{
    public virtual int Property1 { get; set; }
}
public class Child2 : Item
{
    public virtual int Property2 { get; set; }
}

public class ItemMap : ClassMap<Item>
{
    public ItemMap()
    {
        Id(p => p.Id).Column("BaseItemId").GeneratedBy.HiLo("100");

        Join("BaseItemTable", join =>
        {
            join.KeyColumn("BaseItemId");
            join.Map(x => x.Created);
        });

        DiscriminateSubClassesOnColumn("ItemType");
    }
}

public class Child1Map : SubclassMap<Child1>
{
    public Child1Map()
    {
        DiscriminatorValue("Child1");

        Map(x => x.Property1);
    }
}
public class Child2Map : SubclassMap<Child2>
{
    public Child2Map()
    {
        DiscriminatorValue("Child2");

        Map(x => x.Property2);
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.