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) 标识列