Fetch: retrieve any association (one-to-one, one-to-many, many-to-one....)
Cascade: save, update or delete associated objects when doing so in the
entity that declares the cascade.

I suggest that you look at Sharp Architecture. It's complex, but solid.

   Diego


On Fri, Jun 11, 2010 at 11:18, tqwhite <[email protected]> wrote:

> Personally, I would have used "fetch" to refer to any database
> retrieval. My use of "cascade" referred to the specific aspect of
> collecting the associations. However, I am a student here and
> appreciate your correction.
>
> "Smells!" Ouch - though I deeply appreciate the feedback. I've written
> a static class, Orm, to manage a single session available to any
> software that needs it during this browser visit. Using
> "HttpContextAccess.getSessionVariable" allows me to store the session
> so that I can avoid recreating it if a different method executes
> startSession(). You say there are better patterns out there. Would you
> mind pointing me at something that whose smell is a little more
> beautiful?
>
> In any case, the inclusion of the Orm.startSession() is an error. But,
> it has no effect since the routine sees that a session has already
> been created and does nothing. I do startSession() in the controller
> that calls the model method I showed here. That's where the missing
> close is as well.
>
> All of which is to say that it appears that, despite the anomalies, I
> gather that you don't see any reason that I _always_ get the
> subordinate associations. That said, can you make any suggestions
> about how I can try to debug this? I have situations in my near future
> where this problem will try to bring a thousand or more extra objects
> into being against my will.
>
> As always, I can't thank you enough for the help here. We still need
> to figure out how to do international remote-control cocktails.
>
> peace,
> tqii
>
> ps, I use the funny query syntax at the moment because I can easily
> edit it to do different things. In the future, there will only be one
> record in that table and the query adjusted to reflect that fact.
>
> pps, I'm actually a PHP guy dropped kicking and screaming into .NET.
> Thankfully, I was able to switch to MVC.NET (a billion times better).
> Visual Studio uses a different case standard so I am presently
> inconsistent, sometimes PHP, sometimes .NET. Truth is, I haven't
> exactly figured out what .NET wants. If you can point me at a
> reference that explains the .NET way of naming things, I'd be
> grateful.
>
>
>
> On Jun 10, 7:11 pm, Diego Mijelshon <[email protected]> wrote:
> > Yeah... that too :-D
> >
> >    Diego
> >
> >
> >
> > On Thu, Jun 10, 2010 at 20:12, Fabio Maulo <[email protected]> wrote:
> > > Diego.
> > > In that "pattern", did you see a session close ?
> >
> > > On Thu, Jun 10, 2010 at 6:03 PM, Diego Mijelshon <
> [email protected]>wrote:
> >
> > >> For retrieving associations, the term is "fetching".
> >
> > >> With that mapping, NH should be retrieving the "First"* LEAInfo
> instance
> > >> only, and retrieve the schools only when you iterate the corresponding
> > >> collections.
> >
> > >> Your query looks strange too. You are doing .Skip(0).Take(1).First(),
> > >> which is the same as .Skip(1).First()...
> >
> > >> Also, the pattern you are using to create the session and factory
> smells a
> > >> little... I can't say it's wrong because I have no idea about the
> > >> implementation of HttpContextAccess.getSessionVariable. I suggest you
> > >> take a look at the many existing samples and patterns.
> > >> BTW, are you porting something from Java? (because of the camelCase
> method
> > >> names...)
> >
> > >> *: you are not specifying an order, so "first" is whatever the
> database
> > >> decides is the first row
> >
> > >>    Diego
> >
> > >> On Thu, Jun 10, 2010 at 17:18, tqwhite <[email protected]> wrote:
> >
> > >>> Do we use a different word than "cascade" to refer to the depth of
> > >>> associations retrieved? It seems a natural inverse of the usage when
> > >>> saving. Please advise.
> >
> > >>> According to Visual Studio, I never use the word "lazy" in the entire
> > >>> project.
> >
> > >>> The mapping file is below. Thank you very much for looking at it.
> I've
> > >>> already killed hours on this. I really need help.
> >
> > >>> tqii
> >
> > >>> <?xml version="1.0" encoding="utf-8" ?>
> >
> > >>>        <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> > >>> assembly="DatabaseModel" namespace="DatabaseModel">
> >
> > >>>          <class name="DatabaseModel.Models.LEAInfo, DatabaseModel"
> > >>> table="Districts" >
> > >>>                <id name="RefId" type="guid">
> > >>>                  <generator class="guid.comb">
> > >>>                  </generator>
> > >>>                </id>
> > >>>                <property name="LocalId" column="LocalId"
> type="string"
> > >>> not-
> > >>> null="false"/>
> > >>>                <property name="LEAName" column="LEAName"
> type="string"
> > >>> not-
> > >>> null="false"/>
> > >>>                <property name="LEAURL" column="LEAURL" type="string"
> not-
> > >>> null="false"/>
> >
> > >>>                <bag name="schools">
> > >>>                  <key column="LEAInfoRefId"/>
> > >>>                  <one-to-many class="DatabaseModel.Models.SchoolInfo,
> > >>> DatabaseModel" />
> > >>>                </bag>
> > >>>          </class>
> >
> > >>>          <class name="DatabaseModel.Models.StudentPersonal,
> > >>> DatabaseModel"
> > >>> table="Students">
> > >>>                <id name="RefId" type="guid">
> > >>>                  <generator class="guid.comb">
> > >>>                  </generator>
> > >>>                </id>
> > >>>                <property name="LocalId" column="LocalId"
> type="string"
> > >>> not-
> > >>> null="false"/>
> >
> > >>>                <component name="Name"
> > >>> class="DatabaseModel.Services.BaseDataObjects.NameOfRecordType,
> > >>> DatabaseModel">
> > >>>                          <property name="FirstName"/>
> > >>>                          <property name="LastName"/>
> > >>>                </component>
> > >>>                <bag name="enrollments">
> > >>>                           <key column="StudentPersonalRefId"/>
> > >>>                           <one-to-many
> > >>> class="DatabaseModel.Models.StudentSchoolEnrollment, DatabaseModel"
> />
> > >>>                </bag>
> > >>>          </class>
> >
> > >>>          <class name="DatabaseModel.Models.SchoolInfo, DatabaseModel"
> > >>> table="Schools">
> > >>>                <id name="RefId" type="guid">
> > >>>                  <generator class="guid.comb">
> > >>>                  </generator>
> > >>>                </id>
> >
> > >>>                <property name="SchoolName" type="string"
> > >>> not-null="false"/>
> > >>>                <property name="LEAInfoRefId" type="string"
> > >>> not-null="false"/>
> >
> > >>>                <bag name="enrollments">
> > >>>                          <key column="SchoolInfoRefId"/>
> > >>>                           <one-to-many
> > >>> class="DatabaseModel.Models.StudentSchoolEnrollment, DatabaseModel"
> />
> > >>>                </bag>
> > >>>          </class>
> >
> > >>>          <class name="DatabaseModel.Models.StudentSchoolEnrollment,
> > >>> DatabaseModel" table="StudentSchoolEnrollment">
> > >>>                <id name="RefId" type="guid">
> > >>>                  <generator class="guid.comb">
> > >>>                  </generator>
> > >>>                </id>
> > >>>                <property name="SchoolYear" column="SchoolYear"
> > >>> not-null="false"/>
> > >>>                <property name="EntryDate" not-null="false"/>
> >
> > >>>                <many-to-one not-null="false"
> > >>> class="DatabaseModel.Models.StudentPersonal, DatabaseModel"
> > >>> name="student" column="StudentPersonalRefId"/>
> > >>>                <many-to-one not-null="false"
> > >>> class="DatabaseModel.Models.SchoolInfo, DatabaseModel" name="school"
> > >>> column="SchoolInfoRefId" />
> >
> > >>>          </class>
> >
> > >>>        </hibernate-mapping>
> >
> > >>> On Jun 10, 3:05 pm, Diego Mijelshon <[email protected]> wrote:
> > >>> > What are your mappings?
> > >>> > And what does this have to do with cascading?
> > >>> > Wild guess: you've set everything as lazy="false".
> >
> > >>> >    Diego
> >
> > >>> > On Thu, Jun 10, 2010 at 16:41, tqwhite <[email protected]> wrote:
> > >>> > > I cannot control the cascade depth. No matter what I do, NH
> retrieves
> > >>> > > the entire object graph and all associations. It stops at some
> level
> > >>> > > (there is recursion otherwise) though the data is too big and
> complex
> > >>> > > for me to analyze exactly where.
> >
> > >>> > > I am presently trying to set the depth to zero (I also tried one)
> in
> > >>> > > an attempt to get something recognizable to happen. It is not
> > >>> working.
> > >>> > > Can you see what I am doing wrong?
> >
> > >>> > > This method looks up the root object:
> >
> > >>> > >        public virtual LEAInfo getFirst()
> > >>> > >        {
> > >>> > >            Orm.startSession();
> >
> > >>> > >            var dbResult = (from testList
> > >>> > >                            in Orm.session.Linq<LEAInfo>()
> > >>> > >                            select testList)
> > >>> > >                            .Skip(0)
> > >>> > >                            .Take(1);
> >
> > >>> > >            LEAInfo outObj = dbResult.First<LEAInfo>();
> > >>> > >            return outObj;
> > >>> > >        }
> >
> > >>> > > Orm.startSession creates a static session. It works just like I
> > >>> expect
> > >>> > > it to when I am saving things. Note the use of max_fetch_depth:
> >
> > >>> > >        public static ISession startSession(){
> > >>> > >            if (HttpContextAccess.getSessionVariable("session") ==
> > >>> > > null)
> > >>> > >            {
> > >>> > >                Configuration config = new
> > >>> > > NHibernate.Cfg.Configuration()
> > >>> > >                    .SetProperty("max_fetch_depth", "0");
> > >>> > >                config.Configure();
> > >>> > >                ISessionFactory sessionFactory =
> > >>> > > config.BuildSessionFactory();
> > >>> > >                ISession newSession =
> sessionFactory.OpenSession();
> > >>> > >                HttpContextAccess.addSessionVariable("session",
> > >>> > > newSession);
> > >>> > >            }
> > >>> > >            return
> > >>> > > (ISession)HttpContextAccess.getSessionVariable("session");
> > >>> > >        }
> >
> > >>> > > Thanks for your help.
> >
> > >>> > > tqii
> >
> > >>> > > --
> > >>> > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > >>> <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%252bunsubscr...@googlegroup s.com>>
> > >>> > > .
> > >>> > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > >> .
> > >> For more options, visit this group at
> > >>http://groups.google.com/group/nhusers?hl=en.
> >
> > > --
> > > Fabio Maulo
> >
> > >  --
> > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[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]<nhusers%[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