NHibernate:相同的类型,不同的 ClassMaps?

NHibernate: Same type, different ClassMaps?

我有一个用例,在不同的一对多关系中使用相同的类型,关系多端的数据必须根据用途存储到不同的表中。有没有一种方法可以告诉(流利的)NHibernate 使用哪个 ClassMap(例如像下面我的假 UseClassMap 方法)?

粗略示例代码:

public class Foo
{
  public long Id {get; set;}
  public IEnumerable<Bar> TheoreticalBar {get; set;}
  public IEnumerable<Bar> ActualBar {get; set; }
}

public class FooMap : ClassMap<Foo>
{
  Table("Foo");
  Id(x => x.Id);
  HasMany(x => x.TheoreticalBar).UseClassMap(TheoryBarMap);
  HasMany(x => x.ActualBar).UseClassMap(ActualBarMap); 
}

public class TheoreticalBarMap : ClassMap<Bar>
{
  TableNames("TheoreticalBar");
  ...
}

public class ActualBarMap : ClassMap<Bar>
{
  TableNames("ActualBar");
  ...
}

希望获得更多任意和无法解释的否决票,我将回答这个问题:我无法找到明确声明要使用的 ClassMap 的特定方法,但我能够找到没有解决方案添加不必要的子类型或类似的 ClassMaps,方法是向父级设置的子级 class 添加鉴别器值,然后使用 .Where() 方法过滤鉴别器值……像这样:

class Bar
{
  public string BarType {get; protected set};

  public Bar(string barType)
  {
    BarType = barType;
  }
}

public class FooMap : ClassMap<Foo>
{
  Table("Foo");
  Id(x => x.Id);
  HasMany(x => x.TheoreticalBar).Where("BarType = theoretical");
  HasMany(x => x.ActualBar).Where("BarType = actual"); 
}

.Where() 方法允许使用字符串插值和替换,以防您想在我这里的简单示例中避免使用魔法字符串。