queryover 相关问题

QueryOver是一个类似于类型的类似流体的包装器,位于NHibernate ICritieria之上,这是一个支持查询组合的数据库无关的查询API。

左连接、不同和使用 QueryOver 进行分页

我有这样的问题,这似乎很常见,但事实上SO和谷歌的解决方案都不适合我。 让我们考虑这样的情况(与我的非常相似): 公开课用户 {

回答 1 投票 0

如何将 IQueryable 转换为“表达式”<Func" to provide Projection list to NHibernate QueryOver?

请参考以下代码: 使用(ISession会话= SessionFactory.OpenSession()) { //情况 1:使用 Query = 效果很好。 IList listMaster = session.Query 请参考以下代码: using(ISession session = SessionFactory.OpenSession()) { //Case 1: using Query = works fine. IList<MasterDto> listMaster = session.Query<MasterEntity>() .ProjectTo<MasterDto>(autoMapperConfig) .ToList(); //Case 2: using QueryOver = how to achieve same result as above? IQueryable<MasterDto> masterDtos = session.Query<MasterEntity>() .ProjectTo<MasterDto>(autoMapperConfig); IList<MasterEntity> list = session.QueryOver<MasterEntity>() .Select(masterDtos)//This of-course does not work .List(); } 如果我在案例 2 中注释 Select(masterDtos),以上两种情况都会返回相同的结果。其他区别是生成的 SQL 查询。 在上面的情况 1 中,生成的 SQL 仅包含 Dto 中存在的列。它会跳过 Entity 中存在但 Dto 中不存在的附加列。这对于提高 SQL 查询性能是必要的。 传递给 autoMapperConfig 方法的 ProjectTo 参数有 AutoMapper.MapperConfiguration 的实例。 案例 1 工作正常。 但是我有大量使用 QueryOver 的遗留代码。 将此代码从 QueryOver 迁移到 Query NHibernate API 非常困难且容易出错。 所以,我正在考虑如何使用 QueryOver 来实现这一目标(选择选定的列)。 我已经知道的一种方法是使用 Select 和/或 SelectList 的 QueryOver 方法并向其传递适当的参数。 这会工作得很好;但这种方法几乎没有问题: 我必须输入每个投影/表达式作为这些方法的输入。 如果我以后更改 Dto,我应该记得更改投影列表。 所以,我在想上面代码中提到的一些事情。这可能吗?还有其他类似/更简单的解决方案吗? Query和QueryOver是两个不同的东西。他们以不同的方式工作。对于 QueryOver,您必须使用 Select 和/或 SelectList 的 QueryOver 方法,正如您在问题中指出的那样。 对于 Query(返回 IQueryable),ProjectTo 接受类型为 IConfigurationProvider 的参数,您将其作为 autoMapperConfig 提供。因此,你的第一个案例有效。 您的第二种情况完全错误,因为传递给 Select 方法的参数与类型不匹配。 以下代码与您的第一个案例类似并且可以正常工作: var autoMapperConfig = new MapperConfiguration ( cfg => { cfg.CreateProjection<MasterEntity, MasterDto>(); cfg.CreateProjection<DetailEntity, DetailDto>() .ForMember(dto => dto.MasterData, conf => conf.MapFrom(ol => ol.Master.MasterData)); cfg.CreateProjection<DetailEntity, DetailMiniDto>(); } ); using(ISession session = SessionFactory.OpenSession()) { IList<MasterDto> listMaster = session.Query<MasterEntity>() .Where(x => x.MasterId == 1) .ProjectTo<MasterDto>(autoMapperConfig) .ToList(); IList<DetailDto> listDetail = session.Query<DetailEntity>() .Where(x => x.Master.MasterId == 1) .ProjectTo<DetailDto>(autoMapperConfig) .ToList(); } 以下是MasterEntity、MasterDto和MasterMap: public class MasterEntity { public virtual int MasterId { get; set; } public virtual string MasterData { get; set; } public virtual IList<DetailEntity> DetailList { get; set; } } public class MasterDto { public string MasterData { get; set; } public IList<DetailMiniDto> DetailList { get; set; } } internal class MasterMap : ClassMapping<MasterEntity> { public MasterMap() { Table("MasterTable"); Id(x => x.MasterId, im => { im.Column("MasterId"); im.Generator(Generators.Identity); }); Property(x => x.MasterData, map => { map.Type(TypeFactory.GetAnsiStringType(5)); }); Bag ( x => x.DetailList, map => { map.Key(k => k.Column("MasterId")); }, rm => rm.OneToMany() ); } } 以下是DetailEntity、DetailDto、DetailMiniDto和DetailMap: public class DetailEntity { public virtual int DetailId { get; set; } public virtual string DetailData { get; set; } public virtual MasterEntity Master { get; set; } } public class DetailDto : DetailMiniDto { public string MasterData { get; set; } } public class DetailMiniDto { public int DetailId { get; set; } public string DetailData { get; set; } } internal class DetailMap : ClassMapping<DetailEntity> { public DetailMap() { Table("DetailTable"); Id(x => x.DetailId, im => { im.Column("DetailId"); im.Generator(Generators.Identity); }); Property(x => x.DetailData); ManyToOne(x => x.Master, map => { map.Column("MasterId"); map.Cascade(Cascade.None); }); } }

回答 1 投票 0

nhibernate5.5.0 JoinEntityAlias 多个 ProjectionList 结果不起作用

公共IListGetNonassetJoinPersonData(ExpressionConditionnonassetCondition) { var lambda_contract_effect = bizUTRenterContract.

回答 1 投票 0

NHibernate QueryOver 与WhereRestriction 为 OR

我有这个查询,但我似乎找不到如何将WhereRestrictionOn 设置为OR。现在它们的功能为“与”,但我想要一个或另一个。 var privateInfo = Session.QueryOver() ...

回答 2 投票 0

从子选择中选择数据

这就是我想使用 NHibernate QueryOver 完成的任务: 选择前 10 名*: (SELECT aColumn, min(WorkingDay) as d 来自表 按列分组...

回答 1 投票 0

使用NHibernate上的QueryOver获取有限制的子项计数

我如何使用QueryOver并且不使用公式字段来执行以下操作。我具有以下父母关系公共类俱乐部{公共字符串名称{get;组; } public IList

回答 1 投票 6

如何渴望在NHibernate中加载实体的所有集合

我有这个模型:public class Group {protected Group(){} public Group(string name){} public virtual Guid ID {get;组; }公共虚拟字符串Name {get; ...

回答 1 投票 0

JoinQueryOver和JoinAlias有什么区别?

我需要知道JoinQueryOver和JoinAlias有什么区别,以及何时使用它们?

回答 2 投票 86

Nhibernate queryover union

我有两个基于session.QueryOver的查询。查询是不同的,但是返回一个IList相同类型的对象。两个查询的结果数是我需要的总对象。我该如何...

回答 1 投票 0

带有SelectList的NHibernate QueryOver

我对一个表有多个查询。由于并非所有列/属性都是必需的,因此我将在选择列表的帮助下指定列。以以下方法为例。此方法有效...

回答 1 投票 0

使用in子句NHibernate多个子查询

我有一个以下工作SQL查询:SELECT * FROM truck t WHERE t.currentlocationdbid IN(SELECT dbid FROM location WHERE name ='Los Angeles')或t.nextdestinationdbid IN(SELECT dbid FROM ...

回答 1 投票 2

NHibernate QueryOver - 做Fetches和OrderBy - >使用什么语法?

全部,我有一个查询:_AddOrderBy(sortOptions,query).Fetch(x => x.ImageType).Eager .Fetch(x => x.User).Eager .fetch(x => x.Partner)。 ...

回答 1 投票 1

NHibernate 3.0:没有使用QueryOver的FirstOrDefault()?

我正在使用FluentNHibernate和NH 3.0,使用LINQ提供程序和新的QueryOver语法。现在使用QueryOver我想得到一个项目(称为结果),其时间戳值尽可能接近......

回答 5 投票 29

Kendo网格服务器端分组

我正在使用Asp net 5,NHibernate 3.3和Kendo UI MVC包装器来生成网格以呈现客户订单表。数据库中已经有很多订单,数量也在不断增长。所以我 ...

回答 2 投票 3

关于几个属性的NHibernate QueryOver条件

我有这个装甲表,有三个字段来识别个别设计:品牌,型号和版本。我必须为我们的软件实现搜索功能,让用户搜索装甲......

回答 1 投票 -1

© www.soinside.com 2019 - 2024. All rights reserved.