Fluent nHibernate - 如何在联结表上映射非键列?

Posted

技术标签:

【中文标题】Fluent nHibernate - 如何在联结表上映射非键列?【英文标题】:Fluent nHibernate - How to map a non-key column on a junction table? 【发布时间】:2010-06-09 04:05:41 【问题描述】:

以 Fluent nHibernate 网站上提供的示例为例,我需要稍微扩展一下:

(来源:fluentnhibernate.org)

我需要在 StoreProduct 表中添加一个“数量”列。我将如何使用 nHibernate 映射它?

为上述给定场景提供了一个示例映射,但我不确定如何将 Quantity 列映射到 Product 类的属性:

public class StoreMap : ClassMap<Store>

  public StoreMap()
  
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Employee)
      .Inverse()
      .Cascade.All();
    HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");
  

【问题讨论】:

【参考方案1】:

一个建议是不使用 hasManyToMany 映射,并为作为 Product 子类的 StoreProduct 提供一个单独的映射类。

新店铺地图

public class StoreMap : ClassMap<Store>

  public StoreMap()
  
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Employee)
      .Inverse()
      .Cascade.All();
    HasMany(x => x.Products)
     .Cascade.All();
  

NB 将 HasManyToMany 改为 HasMany。

商店产品的新子类映射

public class StoreProductMap : SubclassMap<StoreProduct>

   References(x=>x.Store);

   Map(x=>x.Quantity);

新的 StoreProduct 实体

public class StoreProduct : Product

    public virtual Store Store get;set;
    public virtual int Quantity get;set;

希望对您有所帮助。

【讨论】:

以上是关于Fluent nHibernate - 如何在联结表上映射非键列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Fluent NHibernate ClassMap 类中指定表名?

如何在Fluent NHibernate中映射受保护的集合?

如何使用 Fluent-NHibernate 和 MySQL 指定自动递增 (int) 标识列

Fluent NHibernate:如何将整个类映射为只读?

许多实体到一个联结表 NHibernate 建模

如何告诉 Fluent NHibernate 不要映射类属性