Jason, thanks for the tip, I'll give it a try. However, if anyone else have a different idea all the help is welcomed
By the way, sorry for the duplicated post!! On Apr 28, 2:42 pm, Jason Meckley <[email protected]> wrote: > just because the data access is located in a remote dll doesn't mean > you cannot use Session/Request. You can use another object to delegate > the creation/destruction of the session in relation to the request > which references the DAL assembly. For more information see how > Caste.NHibernateFacility.SessionManager works. > > If this isn't an option then you need to preload all the data you need > when you make the call to the DAL. Either than or pass the entity back > to the DAL, merge with the current session, and then load other > properties. > > On Apr 28, 6:09 am, Corisco <[email protected]> wrote: > > > I am developing somekind of CMS web app. After few additions to the DB > > it experiences huge performance problems. I'm new to the > > ActiveRecord / NHibernate world. So probably I'm making some > > configuration mistakes, but I'm not able to solve it. > > > I have tried using lazy relations and it seems to improve a lot. But > > now I'm getting the famous 'Failed to lazily initialize a collection - > > no session' error. However, I have to encapsulate all db related > > actions in a dll apart so I cannot enable the session-per-request as > > suggested > > inhttp://using.castleproject.org/display/AR/Enable+Session+per+Request > > > I don't even know if the lazy relations solution is the correct > > approach. Any clue? > > > Thanks in advance!! > > > I'm initializing ActiveRecord through an InPlaceConfigurationSource. > > The basic scheme, designed with ActiveWriter, looks like this > > (summarized) > > > |------------(n-m)--------------------->>CMSTransientCategory<<-----------------(n-m) > > --------| > > > | > > | > > | > > | > > |--->>CMSTransientApplication<<---------(n-m)------------->>CMSTransientPackage<<---| > > > | > > | > > | > > |---------(1-n)----->>CMSTransientFileInstance<<----(n- > > m)----->>CMSTransientOperatingSystem > > > | | > > > | | > > CMSTransientFileInformation<<----(1-n)----| |---(1-n)-- > > > >>CMSTransientContentType > > > These are the parameters used for initialization > > > isWeb=True > > isDebug=False > > hibernate.connection.driver_class=NHibernate.Driver.SqlClientDriver > > hibernate.dialect=NHibernate.Dialect.MsSql2005Dialect > > hibernate.connection.provider=NHibernate.Connection.DriverConnectionProvider > > hibernate.connection.connection_string=Server=192.168.1.202\sqlexpress;Database=mssf;Uid=******;Pwd=*********; > > > And the generated classes are > > > [ActiveRecord()] > > public partial class CMSTransientCategory : > > CMSTransientEntity<CMSTransientCategory> { > > > private IList<CMSTransientPackage> _packages; > > private IList<CMSTransientApplication> _applications; > > > [HasAndBelongsToMany(typeof(CMSTransientPackage), > > ColumnRef="PackageId", ColumnKey="CategoryId", > > Table="Packages2Categories")] > > public virtual IList<CMSTransientPackage> Packages { > > get {return this._packages;} > > set {this._packages = value;} > > } > > > [HasAndBelongsToMany(typeof(CMSTransientApplication), > > ColumnRef="ApplicationId", ColumnKey="CategoryId", > > Table="Applications2Categories")] > > public virtual IList<CMSTransientApplication> Applications { > > get {return this._applications;} > > set{this._applications = value;} > > } > > } > > > [ActiveRecord()] > > public partial class CMSTransientPackage : > > CMSTransientEntity<CMSTransientPackage> { > > > private IList<CMSTransientCategory> _categories; > > private IList<CMSTransientApplication> _applications; > > > [HasAndBelongsToMany(typeof(CMSTransientCategory), > > ColumnRef="CategoryId", ColumnKey="PackageId", > > Table="Packages2Categories")] > > public virtual IList<CMSTransientCategory> Categories { > > get {return this._categories;} > > set{this._categories = > > value;} > > } > > > [HasAndBelongsToMany(typeof(CMSTransientApplication), > > ColumnRef="ApplicationId", ColumnKey="PackageId", > > Table="Applications2Packages")] > > public virtual IList<CMSTransientApplication> Applications { > > get {return this._applications;} > > set{this._applications = > > value;} > > } > > } > > > [ActiveRecord()] > > public partial class CMSTransientApplication : > > CMSTransientEntity<CMSTransientApplication> { > > > private bool _isExecutable; > > private bool _isRam; > > private IList<CMSTransientFileInstance> _fileInstances = new > > List<CMSTransientFileInstance>(); > > private IList<CMSTransientCategory> _categories; > > private IList<CMSTransientPackage> _packages; > > > [Property(ColumnType="Boolean")] > > public virtual bool IsExecutable { > > get {return this._isExecutable;} > > set{this._isExecutable = > > value;} > > } > > > [Property(ColumnType="Boolean")] > > public virtual bool IsRam { > > get {return this._isRam;} > > set{this._isRam = value;} > > } > > > [HasMany(typeof(CMSTransientFileInstance), Lazy=true)] > > public virtual IList<CMSTransientFileInstance> FileInstances { > > get {return this._fileInstances;} > > set{this._fileInstances = > > value;} > > } > > > [HasAndBelongsToMany(typeof(CMSTransientCategory), > > ColumnRef="CategoryId", ColumnKey="ApplicationId", > > Table="Applications2Categories")] > > public virtual IList<CMSTransientCategory> Categories { > > get {return this._categories;} > > set{this._categories = > > value;} > > } > > > [HasAndBelongsToMany(typeof(CMSTransientPackage), > > ColumnRef="PackageId", ColumnKey="ApplicationId", > > Table="Applications2Packages")] > > public virtual IList<CMSTransientPackage> Packages { > > get {return this._packages;} > > set{this._packages = value;} > > } > > } > > > [ActiveRecord()] > > public partial class CMSTransientFileInstance : > > ActiveRecordBase<CMSTransientFileInstance> { > > > private int _id; > > private string _name; > > private CMSTransientContentType _contentType; > > private CMSTransientApplication _application; > > private CMSTransientFileInformation _fileInformation; > > private IList<CMSTransientOperativeSystem> _operativeSystems; > > > [PrimaryKey(PrimaryKeyType.Native, ColumnType="Int32")] > > public virtual int Id { > > get {return this._id;} > > set{this._id = value;} > > } > > > [Property(ColumnType="String")] > > public virtual string Name { > > get {return this._name;} > > set{this._name = value;} > > } > > > [BelongsTo("ContentTypeId")] > > public virtual CMSTransientContentType ContentType { > > get {return this._contentType;} > > set{this._contentType = > > value; } > > } > > > [BelongsTo("ApplicationId", NotNull=true)] > > public virtual CMSTransientApplication Application { > > get {return this._application;} > > set{this._application = > > value;} > > } > > > [BelongsTo("FileInformationId")] > > public virtual CMSTransientFileInformation FileInformation { > > get {return this._fileInformation;} > > set{this._fileInformation = > > value;} > > } > > > [HasAndBelongsToMany(typeof(CMSTransientOperativeSystem), > > ColumnRef="OperativeSystemId", ColumnKey="FileId", Lazy=true, > > Table="Files2OperativeSystems")] > > public virtual IList<CMSTransientOperativeSystem> > > OperativeSystems { > > get {return this._operativeSystems;} > > set{this._operativeSystems > > = value; } > > } > > } > > > [ActiveRecord()] > > public partial class CMSTransientContentType : > > ActiveRecordBase<CMSTransientContentType> { > > > private int _id; > > private string _name; > > private string _mIMEType; > > private IList<CMSTransientFileInstance> _files = new > > List<CMSTransientFileInstance>(); > > > [PrimaryKey(PrimaryKeyType.Native, ColumnType="Int32")] > > public virtual int Id { > > get {return this._id;} > > set{this._id = value;} > > } > > > [Property("Description", ColumnType="String", NotNull=true)] > > public virtual string Name { > > get {return this._name;} > > set{this._name = value;} > > } > > > > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
