默认不是懒惰,Fluent NHibernate中有异常

时间:2011-12-02 14:30:04

标签: nhibernate fluent-nhibernate

我希望我的应用程序在没有延迟加载的情况下工作。但是在某些情况下(我想明确设置)我需要延迟加载。

所以,我的默认约定是(最后一行关闭默认的延迟加载):

Fluently.Configure().Database(driverConfig)
            .Mappings(m => m
                .FluentMappings.AddFromAssemblyOf<Limit>()
                .Conventions.AddFromAssemblyOf<Limit>()
                .Conventions.Add(PrimaryKey.Name.Is(x => x.EntityType.Name + "Id"))
                .Conventions.Add(DefaultCascade.All())
                .Conventions.Add(ForeignKey.EndsWith("Id"))
                .Conventions.Add(ConventionBuilder.Id.Always(x => x.GeneratedBy.Native()))
                .Conventions.Add(ConventionBuilder.Id.Always(x => x.Unique()))
                .Conventions.Add(Cache.Is(x => x.NonStrictReadWrite()))
                .Conventions.Add(DefaultLazy.Never())

我希望这很多关系都是懒惰的:

        HasMany(x => x.TestCaseOrdered).KeyColumn("ProductVariantId").LazyLoad();

但是,它并不是懒惰的。我试图用LazyLoad.Never()替换DefaultLazy.Never()约定但它不起作用(我无法理解其中的区别)。

除了一个混凝土外,我怎样才能轻松关闭所有情况下的延迟加载?

1 个答案:

答案 0 :(得分:0)

我正在使用代码检索测试:

 using (ISession session = GetSessionFactory().OpenSession())
        {
            // TODO: Criteria + lazy
            var productVariants = session.CreateCriteria<ProductVariant>().List<ProductVariant>().ToArray();

            // TODO: Lazy loading should be available
            foreach (var product in productVariants)
            {
                var testCaseDataOrders = product.TestCaseOrdered.ToList();
                testCaseDataOrders.Select(x => x.TestCaseData.Id);
            }

            return productVariants;
        }

那就是问题