Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于NHibernate的Linq-在<;多对一>;外键导致额外的查找_C#_Linq_Nhibernate - Fatal编程技术网

C# 用于NHibernate的Linq-在<;多对一>;外键导致额外的查找

C# 用于NHibernate的Linq-在<;多对一>;外键导致额外的查找,c#,linq,nhibernate,C#,Linq,Nhibernate,在为NHibernate试用Linq时,首先注意到: var list1 = (from ut in session.Linq<UserThings>() where ut.User.ID == 10 select ut).ToList(); var list1=(来自会话中的ut.Linq() 其中ut.User.ID==10 选择ut.ToList(); var list2=session.CreateCriteria(typeof(UserThin

在为NHibernate试用Linq时,首先注意到:
    var list1 = (from ut in session.Linq<UserThings>()
    where ut.User.ID == 10
    select ut).ToList();
var list1=(来自会话中的ut.Linq()
其中ut.User.ID==10
选择ut.ToList();
var list2=session.CreateCriteria(typeof(UserThings),“ut”)
.Add(Expression.Eq(“ut.User.ID”,10))
.List();


第一个查询将在“User”表上联接,但第二个查询不会联接。不知何故,第二个用户知道UserID是外键,它不需要执行连接到过滤器。

任何人都会给你最好的建议是不要使用Linq2NH,除非你正在编写一个非常基本的自制应用程序


它非常不成熟,速度慢,只支持基本查询,不支持缓存、快速加载、分组。。。。我花了6个月的时间使用它,后来我放弃了它,努力学习HQL/Criteria。

@reach4thelasers,re:cacable and fetch mode,我想你可以做如下事情,不是吗

var uthings = session.Linq<UserThings>();
uthings.QueryOptions.SetCachable(true);
uthings.QueryOptions.RegisterCustomAction(c => c.SetFetchMode("/UserThing/User", FetchMode.Eager))
return uthings.Where(ut => ut.User == user);
var-uthings=session.Linq();
验证。查询选项。可设置(真);
authings.QueryOptions.RegisterCustomAction(c=>c.SetFetchMode(“/UserThing/User”,FetchMode.Eager))
返回authings.Where(ut=>ut.User==User);

除了不太漂亮的RegisterCustomAction+SetFetchMode,您还可以执行Authings.Expand(“用户”)操作,但这只适用于单个属性,在修复之前无法组合两个展开。

可能重复:我想我现在更愿意使用条件查询。听起来我需要等待。很好地抓住了这个重复。上次我使用它时,Linq查询没有一个可设置的(bool)方法,但它可能在过去6个月内出现了一些。
var uthings = session.Linq<UserThings>();
uthings.QueryOptions.SetCachable(true);
uthings.QueryOptions.RegisterCustomAction(c => c.SetFetchMode("/UserThing/User", FetchMode.Eager))
return uthings.Where(ut => ut.User == user);