我有一个类,它引用了具有复合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()
检索复合键的第二部分的值?
答案 0 :(得分: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;