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

时间:2013-04-16 08:26:43

标签: c# fluent-nhibernate-mapping

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

1 个答案:

答案 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;