在运行时分配复合外键的一部分
本文关键字:一部分 复合 运行时 分配 | 更新日期: 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;