Hello Everyone,
I've been out of the Nhibernate game for 4 years and just getting back to
it on a new project. For the life of me I cannot get lazy loading to work
both on collections or properties, see my model, mapping, and configuration
attached.
I'm using AutoFac as an IoC but I don't believe that should have an
affect. Unless something changed from Nhibernate 3 (last version I used)
to NHibernate 5 that I am not aware off.
Thank you for the help.
--
You received this message because you are subscribed to the Google Groups
"Fluent NHibernate" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/fluent-nhibernate/4cfd8b9c-2467-4b62-bfc5-8f37d02f4354%40googlegroups.com.
using System;
using Autofac;
using Autofac.Builder;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using Microsoft.Extensions.Configuration;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using Sa.Scheduler.Core.Domain.Mapping;
namespace Sa.Scheduler.Tests.Integration.Plumbing
{
public class PersistenceInstaller : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
var cfgBuilder = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json");
var configuration = cfgBuilder.Build();
var connectionString = configuration["ConnectionStrings:SchedulerDb"];
builder.Register(c =>
{
var engine = connectionString.Contains("sql-lite") ? DatabaseEngine.SqlLite : DatabaseEngine.MsSqlServer;
return BuildConfiguration(engine);
}).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<Configuration>().BuildSessionFactory())
.As<ISessionFactory>()
.SingleInstance();
builder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).As<ISession>().SingleInstance();
}
protected virtual void GenerateSchema(Configuration cfg)
{
//new SchemaExport(cfg).Execute(true, true, false, );
}
private Configuration BuildConfiguration(DatabaseEngine engine)
{
Configuration cfg = null;
switch (engine)
{
case DatabaseEngine.SqlLite:
cfg = SqlLiteConfiguration();
break;
case DatabaseEngine.MsSqlServer:
cfg = SqlServerConfiguration();
break;
}
return cfg;
}
private Configuration SqlLiteConfiguration()
{
return Fluently.Configure().Database(SQLiteConfiguration.Standard.InMemory).Mappings(x =>
{
x.FluentMappings.AddFromAssemblyOf<UserMapping>();
})
.BuildConfiguration();
}
private Configuration SqlServerConfiguration()
{
return Fluently.Configure()
.Database(SetupSqlServerDatabase)
.Mappings(m => { m.FluentMappings.AddFromAssemblyOf<UserMapping>(); })
.BuildConfiguration();
}
protected virtual IPersistenceConfigurer SetupSqlServerDatabase()
{
return MsSqlConfiguration.MsSql2012
.UseOuterJoin().ShowSql()
.ConnectionString(x => x.Database("SaTestDb").TrustedConnection().Server("localhost"));
}
private enum DatabaseEngine
{
MsSqlServer,
SqlLite
}
}
}using FluentNHibernate.Mapping;
using Sa.Scheduler.Core.Domain.Entities;
using Sa.Scheduler.Core.Domain.Util;
namespace Sa.Scheduler.Core.Domain.Mapping
{
public class PartnerMapping:ClassMap<Partner>
{
public PartnerMapping()
{
Table("Partner");
Schema(ModelConstants.PartnerSchema);
Id(e => e.PartnerId);
Map(e => e.PartnerUid);
Map(e => e.Name)
.Not.Nullable()
.Length(256);
Map(x => x.History);
Map(x => x.PhoneNumber).Not.Nullable();
Map(x => x.OwnerProfile).Length(4001); // anything over 4000 is nvarchar(max)
Map(x => x.DescriptionOfServices);
Map(x => x.AutoConfirm).Not.Nullable();
Map(x => x.Active);
References(d => d.Type);
References(x => x.Schedule).Not.Nullable();
Map(x => x.Added).Not.Nullable();
Map(x => x.Updated).Not.Nullable();
Map(x => x.Deleted);
HasMany(x => x.Services)
.AsSet()
.LazyLoad()
.KeyColumn("Partner_id")
.Cascade.SaveUpdate()
.Inverse();
HasMany(x => x.Appointments)
.AsSet()
.LazyLoad()
.KeyColumn("Partner_id")
.Cascade.SaveUpdate()
.Inverse();
}
}
}
using System;
using System.Collections.Generic;
namespace Sa.Scheduler.Core.Domain.Entities
{
public class Partner
{
public Partner()
{
Services = new HashSet<Service>();
Appointments = new HashSet<Appointment>();
PartnerUid = Guid.NewGuid();
}
public virtual int PartnerId { get; protected set; }
public virtual Guid PartnerUid { get; set; }
public virtual string Name { get; set; }
public virtual string History { get; set; }
public virtual string PhoneNumber { get; set; }
public virtual string OwnerProfile { get; set; }
public virtual string DescriptionOfServices { get; set; }
public virtual bool AutoConfirm { get; set; }
public virtual bool Active { get; set; }
public virtual BusinessType Type { get; set; }
public virtual PartnerSchedule Schedule { get; set; }
public virtual DateTime Added { get; set; }
public virtual DateTime Updated { get; set; }
public virtual DateTime? Deleted { get; set; }
public virtual ICollection<Service> Services { get; set; }
public virtual ICollection<Appointment> Appointments { get; set; }
public virtual void AddService(Service service)
{
service.Partner = this;
service.ServiceUid = Guid.NewGuid();
var now = DateTime.Now;
service.Added = now;
service.Updated = now;
Services.Add(service);
}
}
}