C# 具有泛型基类的NHibernate映射

C# 具有泛型基类的NHibernate映射,c#,nhibernate,fluent-nhibernate,nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我用Fluent NHibernate来映射我的实体,我来到了一个我有问题要映射的集合。我尝试过子类映射的不同变体,但似乎无法正确映射购物车、项目或订单。Item、CartItem、OrderItem和ProjectItem映射良好。我是NHibernate的新手,我就是不知道如何告诉它做我想做的事 编辑:这是我使用此继承结构的模式: public abstract class Item { public virtual int Id {get;set;} public virt

我用Fluent NHibernate来映射我的实体,我来到了一个我有问题要映射的集合。我尝试过子类映射的不同变体,但似乎无法正确映射购物车、项目或订单。Item、CartItem、OrderItem和ProjectItem映射良好。我是NHibernate的新手,我就是不知道如何告诉它做我想做的事

编辑:这是我使用此继承结构的模式:

public abstract class Item
{
    public virtual int Id {get;set;}
    public virtual decimal Price {get;set;}
}

public class CartItem : Item
{
    public virtual string ProjectName {get;set;}
}

public class OrderItem : Item
{
    public virtual IList<Payment> Payments {get;set;}
}

public class ProjectItem : Item
{
    public virtual string ProjectName {get;set;}
}

public abstract class ItemCollection<T> where T: Item
{
    public virutal IList<T> Items {get;set;}
}

public abstract class CommerceCollection<T> : ItemCollection<T> where T : Item
{
    public virtual decimal Total {get;set;}
}

public class Project : ItemCollection<ProjectItem> 
{
    public virtual string ProjectName {get;set;}
}

public class Cart : CommerceCollection<CartItem> {}

public class Order : CommerceCollection<OrderItem>
{
    public virtual string OrderTrackingNumber {get;set;}
}

/*-------  MAPS  -------*/
public class ItemMap: ClassMap<Item>
{
    public ItemMap()
    {
        MapId();
        Map(x=> x.Price);
    }
}

public class OrderItemMap : SubclassMap<OrderItem>
{
    public OrderItemMap()
    {
        Map(x => x.OrderItemProperty);
    }
}

public class CartItemMap : SubclassMap<CartItem>
{
    public CartItemMap()
    {
        Map(x => x.CartItemProperty);
    }
}

public class ProjectItemMap : SubclassMap<ProjectItem>
{
    public ProjectItemMap()
    {
        Map(x => x.ProjectItemProperty);
    }
}

 public class CartMap : ClassMap<Cart>
    {
        public CartMap()
        {
            Map(x => x.Total);
            HasMany(x => x.Items);
        }
    } 

    public class OrderMap : ClassMap<Order>
    {
        public OrderMap()
        {
            Map(x => x.Total);
            HasMany(x => x.Items);
        }
    }

这是地图的简化版本吗?如果没有:

您的子类映射缺少对KeyColumnItem\u id的调用;这是为每个子类映射获取一个表所必需的。 您的HasMany呼叫丢失了一个呼叫,如.KeyColumnCart\u id。
我知道我需要做什么。对于实现泛型基类CommerceCollection的类,我必须为泛型集合添加一个带有参数的映射,然后在子类上指定KeyColumn属性

以下是新的CartMap:

public class CartCollectionMap : CommerceCollectionMap<CartItem> {}

    public class CartMap: SubclassMap<Cart>
    {
        public CartMap()
        {
            KeyColumn("CommerceCollection_id");
        }
    } 

似乎购物车、项目和订单不是从项目继承的。正确吗?没错,购物车项目和订单都有项目集合。这是一个简化的映射。
CREATE TABLE Cart (CommerceCollection'1_id int PRIMARY KEY)