我有一个与project有多对多关系的用户对象。在我的用户映射中,我有这个:
HasManyToMany(x => x.Projects).Table("UsersProjects").ParentKeyColumn("UserID").Access.None();
当我运行一个简单的 get by id 查询时:
session.QueryOver<User>()
.Where(x => x.PrimaryID == id)
.Take(1).SingleOrDefault();
我得到两个正在运行的查询 - 第一个是通过 id 进行获取的查询,第二个是获取项目列表的查询。
我认为 noop 属性的重点是让 NHibernate 可以知道关系,但实际上并没有填充属性......?有趣的是,查询后 Projects 属性为 null - 因此没有设置该属性(使第二个查询更加冗余!)
我正在使用 NHibernate v3.1.0.4000 和 FluentNHibernate v1.2.0.712
编辑
我做了一些测试并确定这不是使用流畅查询界面所特有的问题。此外,当我将我的映射转储到 hbm 文件时,此属性的映射如下:
<set access="none" name="Projects" table="UsersProjects">
<key>
<column name="UserID" />
</key>
<many-to-many class="Project">
<column name="ProjectID" />
</many-to-many>
</set>
这看起来像我所期望的(http://ayende.com/blog/4054/nhibernate-query-only-properties)。