Sorry I don't understand. Map what in point 2? Are you suggesting that
I place a 'view model' into my 'domain model'?

Do you suggest (see point 3) that I hit the database several times to
count via the repository for
ViewPublications?

Thanks.

On Sep 13, 12:41 pm, John Davidson <[email protected]> wrote:
> The steps to do this are fairly simple, but I do not have the details of
> your application or data model to provide you the exact code.
>
> 1. Create a view based on the RelationshipStatementPublications table. Call
> it ViewRelationshipStatementPublications.
> 2. Map it to a new class ViewPublications. Ensure the mapping is marked
> mutable=false.
> 3. Change your code for doing the count to now go against the repository for
> ViewPublications.
>
> You really need to do this yourself so that you learn how to do it.
>
> John Davidson
>
> On Tue, Sep 13, 2011 at 3:26 AM, csetzkorn <[email protected]> wrote:
> > Thanks. Could you please provide some more details for my situation
> > (class code, [fnh] mapping). Thanks!
>
> > On Sep 12, 1:51 pm, John Davidson <[email protected]> wrote:
> > > You need a new class with no joins to do what you want. No other way!!
>
> > > John Davidson
>
> > > On Mon, Sep 12, 2011 at 8:33 AM, csetzkorn <[email protected]> wrote:
> > > > Sorry I still do not understand. This is my C# code:
>
> > > > return from oi in NHibernateSession.Current.Query<BlaInteraction>()
> > > > select new BlaViewModel
> > > > {
> > > >  ...
>
> > > >  NoPublications = oi.Publications.Count(),
>
> > > >  ...
> > > > };
>
> > > > I use Count() which means I do not need to populate the publications
> > > > of oi. So the following ‘sub query’ (?) which is part of the select
> > > > part of the generated sql (slightly adapted):
>
> > > > select cast(count(*) as INT) from RelationshipStatementPublications
> > > > publicatio21_, Publication publicatio22_ inner join Statements
> > > > publicatio22_1_ on publicatio22_.StatementId=publicatio22_1_.DBId
> > > > where publicatio21_.StatementId = 22762181 and
> > > > publicatio21_.PublicationId=publicatio22_.StatementId
>
> > > > is far too complicated. The joins are just not necessary. Hence,
> > > > something like this sub query:
>
> > > > select cast(count(*) as INT) from RelationshipStatementPublications
> > > > publicatio21_ where publicatio21_.StatementId = 22762181
>
> > > > would be enough.
>
> > > > Could you please elaborate on the separate read-only class? Thanks.
>
> > > > Christian
>
> > > > On Sep 12, 1:12 pm, John Davidson <[email protected]> wrote:
> > > > > The big question is why does nhibernate think that it needs to join
> > > > > statement just to count the publications and how can I prevent this?
>
> > > > > This is because you are telling it to always do the join so that you
> > can
> > > > > navigate the hierarchy.
>
> > > > > If you do not want to navigate the hierarchy for your connoting then
> > you
> > > > > need a separate class to do so that does not have the join mapped. It
> > > > should
> > > > > also be marked as readonly so that it does not interfere with your
> > other
> > > > > processes.
>
> > > > > John Davidson
>
> > > > > On Mon, Sep 12, 2011 at 7:29 AM, csetzkorn <[email protected]>
> > wrote:
> > > > > > Thanks for your reply. I am sorry but can you please elaborate on
> > this
> > > > > > as I do not understand? I have this inheritance structure:
>
> > > > > > Statement -> Publication
>
> > > > > > Statement->X
>
> > > > > > In statement I have an IList of Publication so that any Statement
> > > > > > (e.g. X above) can be associated with a publication (obviously it
> > > > > > wouldn’t necessarily make sense to associate a publication with
> > > > > > another publication).
>
> > > > > > My fluent nhibernate mapping for statement is:
>
> > > > > > mapping.HasManyToMany(x =>
> > > > > > x.Publications).Table("RelationshipStatementPublications")
>
> > > > > > I have tried things like:
>
> > > > > > mapping.HasManyToMany(x =>
>
> > x.Publications).Table("RelationshipStatementPublications").Fetch.Select().ExtraLazyLoad();
>
> > > > > > but this did not change anything.
>
> > > > > > The big question is why does nhibernate think that it needs to join
> > > > > > statement just to count the publications and how can I prevent
> > this?
> > > > > > IMHO it ‘thinks’ that it needs to populate the whole publication
> > (i.e.
> > > > > > join the parent: statement) ...
>
> > > > > > Thanks.
>
> > > > > > Christian
>
> > > > > > On Sep 9, 4:20 pm, John Davidson <[email protected]> wrote:
> > > > > > > So your Publications class is mapped with a join to Statements.
> > If
> > > > you
> > > > > > want
> > > > > > > your query to not include that inner join then you need to create
> > > > another
> > > > > > > class, say RoPublications, that is set as read only and does not
> > have
> > > > the
> > > > > > > join, then use that class for your count.
>
> > > > > > > John Davidson
>
> > > > > > > On Fri, Sep 9, 2011 at 10:51 AM, csetzkorn <[email protected]
>
> > > > wrote:
> > > > > > > > Hi,
>
> > > > > > > > Thanks for the reply. I copy and paste the question on SA
> > below.
> > > > Not
> > > > > > > > sure why it is incomplete - please let me know why. Thanks!
>
> > > > > > > > I am using this query:
>
> > > > > > > >   return from oi in
> > > > NHibernateSession.Current.Query<BlaInteraction>()
> > > > > > > >   select new BlaViewModel
> > > > > > > >   {
> > > > > > > >     ...
>
> > > > > > > >     NoPublications = oi.Publications.Count(),
>
> > > > > > > >     ...
> > > > > > > >   };
>
> > > > > > > > BlaInteraction contains an IList of publications (i.e.
> > entities).
> > > > To
> > > > > > > > determine the number of publications one does not really need
> > to do
> > > > > > > > all the joins for a publication. Can I prevent nhibernate from
> > > > using
> > > > > > > > joins in the generated sql (e.g. using projection???) somehow?
>
> > > > > > > > Thanks.
>
> > > > > > > > Christian
>
> > > > > > > > PS:
>
> > > > > > > > This is what NH produces (slightly adapted):
>
> > > > > > > >   select cast(count(*) as INT) from
> > > > > > > > RelationshipStatementPublications publicatio21_, Publication
> > > > > > > > publicatio22_ inner join Statements publicatio22_1_ on
> > > > > > > > publicatio22_.StatementId=publicatio22_1_.DBId where
> > > > > > > > publicatio21_.StatementId = 22762181 and
> > > > > > > > publicatio21_.PublicationId=publicatio22_.StatementId
>
> > > > > > > > This is what would be sufficient:
>
> > > > > > > >   select cast(count(*) as INT) from
> > > > > > > > RelationshipStatementPublications publicatio21_ where
> > > > > > > > publicatio21_.StatementId = 22762181
>
> > > > > > > > On Sep 9, 2:24 pm, John Davidson <[email protected]> wrote:
> > > > > > > > > If you really want an answer here please post the details in
> > your
> > > > > > message
> > > > > > > > > rather than in StackOverflow. I checked StackOverflow and
> > your
> > > > query
> > > > > > > > there
> > > > > > > > > is incomplete. Please try again.
>
> > > > > > > > > John Davidson
>
> > > > > > > > > On Fri, Sep 9, 2011 at 9:01 AM, csetzkorn <
> > [email protected]>
> > > > > > wrote:
> > > > > > > > > > Hi experts,
>
> > > > > > > > > > Could you please be so kind and have a look at this:
>
> >http://stackoverflow.com/questions/7359783/prevent-unnecessary-cross-.
> > > > > > > > ..
>
> > > > > > > > > > Thanks.
>
> > > > > > > > > > Christian
>
> > > > > > > > > > --
> > > > > > > > > > You received this message because you are subscribed to the
> > > > Google
> > > > > > > > Groups
> > > > > > > > > > "nhusers" 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/nhusers?hl=en.
>
> > > > > > > > --
> > > > > > > > You received this message because you are subscribed to the
> > Google
> > > > > > Groups
> > > > > > > > "nhusers" 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/nhusers?hl=en.
>
> > > > > > --
> > > > > > You received this message because you are subscribed to the Google
> > > > Groups
> > > > > > "nhusers" 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/nhusers?hl=en.
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups
> > > > "nhusers" 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/nhusers?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "nhusers" 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/nhusers?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en.

Reply via email to