我希望我的应用程序在没有延迟加载的情况下工作。但是在某些情况下(我想明确设置)我需要延迟加载。
所以,我的默认约定是(最后一行关闭默认的延迟加载):
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()约定但它不起作用(我无法理解其中的区别)。
除了一个混凝土外,我怎样才能轻松关闭所有情况下的延迟加载?
答案 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;
}
那就是问题