0

我有一个类引用另一个具有复合 ID 的类:

SingleIdClassMap(){
  Id(x=>x.Id);
  References(x=>CompositeIdClass);
}

CompositeIdClass(){
  CompositeId().KeyReference(x => x.SingleIdClass).KeyReference(x => x.DynamicProperty);
}

现在这不会编译,因为在 中SingleIdClassMap,没有关于 的信息DynamicProperty。我希望在运行时从另一个类加载它:

PropertyClass.Singleton.GetCurrentProperty();

有没有办法告诉 NHibernate 它可以从中检索复合键的第二部分的值PropertyClass.GetCurrentProperty()

4

1 回答 1

0

IMO过滤器最简单

EntityMap()
{
    Id(x => x.Id);
    HasMany(x => Texts)
        .KeyColumn("entity_id")
        .ApplyFilter("languageFilter", "language_id = :lid");
}

EntityTextClass()
{
    CompositeId()
        .KeyReference(x => x.Entity, "entity_id")
        .KeyProperty(x => x.LanguageId);
}

// at beginning of request
session.EnableFilter("languageFilter").SetParameter(":lid", languageId);

var entity = session.Query<Entity>().Fetch(e => e.Texts).First();
string text = entity.Texts.First();  // could be a seperate property

或者如果您需要所有文本(例如在查看/编辑本地化时)

var entity = session.Query<Entity>().Fetch(e => e.Texts).First();
var allTexts = entity.Texts;
于 2013-04-18T06:29:04.930 回答