我正在使用Fluent NHibernate来映射我的实体,并且我已经到了一组我正在映射的概率图。我尝试过不同的SubclassMap变体,但似乎无法正确映射Cart、Project或Order。项目,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);
}
}
发布于 2011-05-22 19:41:25
我想出了我该做什么。对于实现泛型基类(CommerceCollection)的类,我必须为泛型集合添加一个带有它的参数的映射,然后在子类上指定KeyColumn属性。
下面是新的CartMap:
public class CartCollectionMap : CommerceCollectionMap<CartItem> {}
public class CartMap: SubclassMap<Cart>
{
public CartMap()
{
KeyColumn("CommerceCollection_id");
}
}
Nhibernate生成的SQL如下所示,它将在列名中的‘上失败。
CREATE TABLE Cart (CommerceCollection'1_id int PRIMARY KEY)
发布于 2011-05-11 09:01:59
这是您映射的简化版本吗?若否,则:
.KeyColumn("Cart_id")
.
KeyColumn("Item_id");
的调用(这是获取每个子类映射表所必需的)。https://stackoverflow.com/questions/5943392
复制相似问题