C# 具有泛型基类的NHibernate映射
我用Fluent NHibernate来映射我的实体,我来到了一个我有问题要映射的集合。我尝试过子类映射的不同变体,但似乎无法正确映射购物车、项目或订单。Item、CartItem、OrderItem和ProjectItem映射良好。我是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
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)