我有以下地图
public class FilmActorMap : ClassMap<FilmActor>
{
public FilmActorMap()
{
Table("film_actor");
CompositeId()
.KeyProperty(x => x.ActorId, "actor_id")
.KeyProperty(x => x.FilmId, "film_id");
Map(x => x.LastUpdate, "last_update");
References<Actor>(x => x.Actor, "actor_id"); //.Fetch.Join();
}
}
public class ActorMap : ClassMap<Actor>
{
public ActorMap()
{
BatchSize(100);
Id(x => x.ActorId, "actor_id");
Map(x => x.FirstName, "first_name");
Version(x => x.Version);
}
}
在数据库中,我有如下记录
film_actor
**********
film_id | actor_id | last_update
--------------------------------
1 | 100 | x
Actor
*****
actor_id | Version | first_name
-------------------------------
100 | 1 | Antonio
100 | 2 | Antony
启动应用程序后,将向用户显示已完成的修订列表。
如果用户选择
修订版#1:然后选择电影。演员,我想看看版本= 1的记录 即记录“100 1 Antonio”
修订#2: 记录“100 2 Antony”
修订版#3:虽然为此记录没有第3次修订,所以我希望看到最新版本,即记录“100 2 Antony”
无论如何在nHibernate中注入这种动态条件? 另外,我想在批处理模式下获取记录的条件不同。即
SELECT *
FROM Actor
WHERE (actor_id, Version) in ( SELECT actor_id, Max(Version)
FROM Actor
WHERE Version <= UserEnteredVersion
GROUP BY actor_id)
我不想显式触发查询,而是希望将条件注入现有的映射运行时。这可能在Interceptor中使用吗?
修改#1: 应用程序通过查询加载主模型(这是唯一发出的显式查询),并且当用户在树中导航时,所有其他相关模型通过UI延迟加载。所以我想将where条件注入到Actor引用中以获取所需的actor运行时版本,以便在向下钻取时选择正确的记录。
答案 0 :(得分:1)
您仍然可以使用普通查询。只需按要求的修订(例如3)减去修订并按第一个条目排序。