Well, I have an entity class, which have property that is a collection
of other entity classes, and each one of those classes have more
relations with more classes. If I perform a FindAll for the first
class, the mediator is retrieving all the classes with ALL the
collections initialized. Which queries pretty much the entire
database.

I think that is very expensive assuming a lot of client users perform
many find operations constantly.

On Dec 16, 8:46 am, Jason Meckley <[email protected]> wrote:
> "a query like the one I'm attempting to perform would be really
> expensive to the database since it has more properties with relations"
> this is vague statement.
> How expensive is the query?
> Why is it expensive?
> Quantifying the answers will give you the information required to
> resolve the bottleneck.
> In any case proxied entities wouldn't resolve the expense/bottleneck.
>
> something ORM's have taught me is there is a balance between the
> number of queries executed and the amount of data returned. the
> obvious goal is to reduce the number of remote calls. I have found
> that sometimes it's better to issue multiple queries with smaller sets
> of data, than issue one query that retrieves everything.
>
> The best techniques I have found for improving database performance
> are properly indexing the database, limiting the results returned by
> the query and batching reads and writes. after that I try to limit the
> number of joins per query. as a last restore to improve performance I
> introduce caching.
>
> On Dec 15, 4:11 pm, Diego AC <[email protected]> wrote:
>
> > So there's no way to perform a FindAll or a HQL query to retrieve lazy-
> > loaded entities? I mean, a query like the one I'm attempting to
> > perform would be really expensive to the database since it has more
> > properties with relations. There must be other way, ain't it?
>
> > On Dec 15, 1:44 pm, Jason Meckley <[email protected]> wrote:
>
> > > proxies are only returned when calling Load<> or when a referenced
> > > entity is accessed. neither of which is the case here. here are some
> > > examples. this is NH code, but it should all be the same for AR since
> > > AR is using NH under the hood.
>
> > > session.Get<Entity>(id);// returns the actual object
> > > session.Load<Entity>(id);// returns a proxy of the object. note this
> > > will throw if the entity doesn't actually exist
>
> > > var entity = session.Get<Entity>(id);
> > > var other = entity.ReferencedEntity; //returns a proxy of the
> > > referenced entity
>
> > > var entities = session.CreateCriteria<Entity>().List<Entity>(); //
> > > returns a list of actual objects
> > > foreach(var entity in entities)
> > > {
> > >    var other = entity.ReferencedEntity; //returns a proxy of the
> > > referenced entity
>
> > > }
>
> > > On Dec 15, 12:35 pm, Diego AC <[email protected]> wrote:
>
> > > > Hi,
>
> > > > I need some help in understanding this issue. I'm using the repository
> > > > pattern with ActiveRecordMediator. I've enabled the session scope http
> > > > module, marked my classes with the ActiveRecord(Lazy = true).
>
> > > > The problem is that each time I perform a FindAll or SlicedFindAll,
> > > > the mediator returns a collection of initialized elements instead of
> > > > proxies. Could someone point me out in the right direction?
>
> > > > This is my repository:
>
> > > > public interface IEntityRepository<TEntity>
> > > > {
> > > >        IList<TEntity> FindAll(int page, int pageSize, out int
> > > > resultCount);
>
> > > > }
>
> > > > public class EntityRepository<TEntity> : IEntityRepository<TEntity>{
> > > >        public virtual IList<TEntity> FindAll(int page, int pageSize)
> > > >        {
> > > >             return
> > > > (IList<TEntity>)ActiveRecordMediator.SlicedFindAll(typeof(TEntity),
> > > > (page * pageSize), pageSize);
> > > >        }
>
> > > > }
>
> > > > [ActiveRecord(Lazy = true)]
> > > > public class DocumentEntity
> > > > {
> > > >         private Guid _id;
> > > >         private IList<DocumentVersionEntity> _versions;
>
> > > >         [PrimaryKey(PrimaryKeyType.GuidComb, "Id")]
> > > >         public virtual Guid Id
> > > >         {
> > > >             get { return _id; }
> > > >             set { _id = value; }
> > > >         }
>
> > > >         [HasAndBelongsToMany(typeof(DocumentVersionEntity),
> > > > RelationType.Bag, Table = DocumentEntriesToDocumentVersions",
> > > > ColumnKey = "DocumentEntryId",
> > > >                              ColumnRef = "DocumentVersionId", Cascade
> > > > = ManyRelationCascadeEnum.AllDeleteOrphan, Lazy = true)]
> > > >         public virtual IList<DocumentVersionEntity> Versions
> > > >         {
> > > >             get { return _versions; }
> > > >             set { _versions = value; }
> > > >         }
>
> > > > }
>
> > > > [ActiveRecord(Lazy = true)]
> > > > public class DocumentVersionEntity
> > > > {
> > > >         private Guid _id;
>
> > > >         [PrimaryKey(PrimaryKeyType.GuidComb, "Id")]
> > > >         public virtual Guid Id
> > > >         {
> > > >             get { return _id; }
> > > >             set { _id = value; }
> > > >         }
>
> > > > }
>
> > > > When I execute the FindAll method, all the objects in the Versions
> > > > array of the DocumentEntity are DocumentVersionEntity instead of
> > > > DocumentVersionEntityProxy and are all intialized.
>
> > > > What am I doing wrong?

-- 
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.

Reply via email to