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