流畅的Nhibernate QueryOver需要很长时间才能从SQL Server获取数据

时间:2017-05-26 06:39:52

标签: c# sql-server asp.net-mvc nhibernate fluent-nhibernate

我使用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");
        }
    }

0 个答案:

没有答案