有一个表 A 包含实体的常见未版本化数据。还有带有特定实体类型的版本化数据的表 B、C、D。所有这些表都引用表 A。
任务是添加实体类型的属性的映射,例如,存储在表 B 中,它将引用表 A,并指定一个规则应如何根据表 A 中的标识符从表 B 中获取实体。(例如,以获取实体的最新版本)。
NHibernate 有可能吗?
有一个表 A 包含实体的常见未版本化数据。还有带有特定实体类型的版本化数据的表 B、C、D。所有这些表都引用表 A。
任务是添加实体类型的属性的映射,例如,存储在表 B 中,它将引用表 A,并指定一个规则应如何根据表 A 中的标识符从表 B 中获取实体。(例如,以获取实体的最新版本)。
NHibernate 有可能吗?
看看Ayende 的这篇文章。您可以使用每个层次结构的表或每个子类的表来映射它。如果您选择前者,则必须在表 A 中添加一个鉴别器列。
class TableA
{
public virtual int Id { get; set; }
internal virtual IList<TableB> Bs { get; set; }
public virtual TableB LatestB { get { return Bs[0]; } set { Bs.Insert(0, value); } }
}
class TableAMap : ClassMap<TableA>
{
public TableAMap()
{
HasMany(x => x.Bs)
.KeyColumn("a_id")
.OrderBy("Version desc");
}
}