首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有泛型基类的NHibernate映射

带有泛型基类的NHibernate映射
EN

Stack Overflow用户
提问于 2011-05-09 22:51:37
回答 2查看 1.2K关注 0票数 0

我正在使用Fluent NHibernate来映射我的实体,并且我已经到了一组我正在映射的概率图。我尝试过不同的SubclassMap变体,但似乎无法正确映射Cart、Project或Order。项目,CartItem,OrderItem和ProjectItem地图罚款。我对NHibernate相当陌生,我只是不知道如何告诉它做我想做的事。

编辑:--这是我要使用这个继承结构的模式:

代码语言:javascript
运行
复制
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);
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-22 19:41:25

我想出了我该做什么。对于实现泛型基类(CommerceCollection)的类,我必须为泛型集合添加一个带有它的参数的映射,然后在子类上指定KeyColumn属性。

下面是新的CartMap:

代码语言:javascript
运行
复制
public class CartCollectionMap : CommerceCollectionMap<CartItem> {}

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

Nhibernate生成的SQL如下所示,它将在列名中的‘上失败。

代码语言:javascript
运行
复制
CREATE TABLE Cart (CommerceCollection'1_id int PRIMARY KEY)
票数 0
EN

Stack Overflow用户

发布于 2011-05-11 09:01:59

这是您映射的简化版本吗?若否,则:

.KeyColumn("Cart_id").

  1. SubclassMappings缺少了对KeyColumn("Item_id");的调用(这是获取每个子类映射表所必需的)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5943392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档