我使用SQL Server 2014创建了一个Asp.Net MVC 5 Web应用程序,并使用Fluent Nhibernate作为ORM。
执行QueryOver
查询时遇到问题。执行查询需要很长时间。
我从Nhibernate
生成SQL查询并在SQL Server Management Studio中执行,在这种情况下,查询执行速度非常快。
Nhibernate QueryOver
有什么问题?我在之前的项目中使用了Fluent Nhibernate
和Oracle,这个问题不会发生在那里。
以下是QueryOver
(在SQL Server上)的示例:
Language languageAlias = null;
Slider sliderAlias = null;
var query = QueryOver.Of(() => sliderAlias)
.Left
.JoinAlias(() => sliderAlias.Language, () => languageAlias)
.Where(() => languageAlias.Name == language && !sliderAlias.IsDelete);
在Repository
中,我执行此查询为:
result = query.GetExecutableQueryOver(Session).List();
有没有人有任何建议?感谢。
编辑: 映射是:
public class LanguageMap : ClassMap<Language>
{
public LanguageMap()
{
Table("LANGUAGES");
LazyLoad();
Id(x => x.Id).GeneratedBy.Custom<EntityGuidIdGenerator>().Not.Nullable().Column("Id").CustomSqlType("NVARCHAR(32)");
Map(x => x.Name).Column("NAME").CustomSqlType("NVARCHAR(15)");
}
}
public class SliderMap : ClassMap<Slider>
{
public SliderMap()
{
Table("SLIDERS");
Not.LazyLoad();
Id(x => x.Id).GeneratedBy.Custom<EntityGuidIdGenerator>().Not.Nullable().Column("Id").CustomSqlType("NVARCHAR(32)");
Map(x => x.Title).Column("TITLE").CustomSqlType("NVARCHAR(512)");
Map(x => x.IsDelete).Column("IS_DELETE").CustomSqlType("BIT");
//references
References(x => x.Language).Column("LANGUAGE");
HasMany(x => x.SliderAttachments)
.Not.LazyLoad()
.KeyColumn("SLIDER")
.Inverse()
.Cascade.Delete();
}
}
public class SliderAttachmentMap : ClassMap<SliderAttachment>
{
public SliderAttachmentMap()
{
Table("SLIDER_ATTACHMENTS");
LazyLoad();
Id(x => x.Id).GeneratedBy.Custom<EntityGuidIdGenerator>().Not.Nullable().Column("Id").CustomSqlType("NVARCHAR(32)");
References(x => x.Slider).Nullable().Column("SLIDER");
References(x => x.Attachment).Nullable().Column("ATTACHMENT");
}
}