在运行时分配复合外键的一部分

本文关键字:一部分 复合 运行时 分配 | 更新日期: 2023-09-27 18:09:17

我有一个类,它引用了另一个类的复合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()中检索复合键的第二部分的值?

在运行时分配复合外键的一部分

我觉得过滤器是最简单的

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;