Fluent NHibernate two levels Inheritance Issue

被刻印的时光 ゝ 提交于 2019-12-12 13:17:38

问题


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:


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);
    }
}


来源:https://stackoverflow.com/questions/16564348/fluent-nhibernate-two-levels-inheritance-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!