C# 为什么NHIbernate(Fluent)仍然对我的Noop属性执行查询?

C# 为什么NHIbernate(Fluent)仍然对我的Noop属性执行查询?,c#,nhibernate,many-to-many,noop,C#,Nhibernate,Many To Many,Noop,我有一个用户对象,它与项目有多对多关系。在我的用户映射中,我有: HasManyToMany(x => x.Projects).Table("UsersProjects").ParentKeyColumn("UserID").Access.None(); 运行简单的按id获取查询时: session.QueryOver<User>() .Where(x => x.PrimaryID == id) .Take(1).SingleOrDefaul

我有一个用户对象,它与项目有多对多关系。在我的用户映射中,我有:

HasManyToMany(x => x.Projects).Table("UsersProjects").ParentKeyColumn("UserID").Access.None();
运行简单的按id获取查询时:

session.QueryOver<User>()
       .Where(x => x.PrimaryID == id)
       .Take(1).SingleOrDefault();
session.QueryOver()
.其中(x=>x.PrimaryID==id)
.Take(1.SingleOrDefault();
我得到两个正在运行的查询—第一个是执行get by id的查询,第二个是获取项目列表的查询

我认为noop属性的意义在于,NHibernate可以意识到一种关系,但不能实际填充属性。。。? 有趣的是,Projects属性在查询后为null,因此没有设置该属性(使得第二个查询更加冗余!)

我使用的是NHibernate v3.1.0.4000和FluentNHibernate v1.2.0.712

编辑 我已经做了一些测试,确定这不是使用fluent查询接口所特有的问题。此外,当我将映射转储到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>


这看起来像我所期望的()。

我怀疑这是一个黑客行为,但是如果我将LazyLoad()添加到映射中,它会阻止第二个不需要的查询运行:

HasManyToMany(x => x.Projects).Table("UsersProjects").ParentKeyColumn("UserID").LazyLoad().Access.None();

我怀疑这是一种黑客行为,但如果我将LazyLoad()添加到映射中,它会阻止第二个不需要的查询运行:

HasManyToMany(x => x.Projects).Table("UsersProjects").ParentKeyColumn("UserID").LazyLoad().Access.None();

Access=none
属性表示POCO中集合的访问级别;不是在你的疑问中。(访问权限可以是“属性”、“字段”、“公共字段”等)。因此,这与如何处理您的收藏无关。
请参阅和

使用
lazy=true
会阻止您的收藏被加载,直到您引用它(据我所知,这是您想要的)。

属性
Access=none
指的是POCO中收藏的访问级别;不是在你的疑问中。(访问权限可以是“属性”、“字段”、“公共字段”等)。因此,这与如何处理您的收藏无关。
请参阅和

使用
lazy=true
将阻止您的收藏被加载,直到您引用它(据我所知,这是您想要的)。

感谢您的解释-尽管我首先遇到了lazy load这一问题,作为解决问题的方法,由于链接,我将您的答案设置为正确答案:)感谢您的解释-尽管我首先遇到了懒惰加载这一问题,但由于链接,我将您的答案设置为正确答案:)