It's most definitely something wrong with FNH, most likely something wrong
with the PersistenceSpecification. What's wrong, I couldn't tell you. This
is going to require more research on my part.

On Tue, Mar 24, 2009 at 1:30 PM, Bill <agilemeis...@gmail.com> wrote:

>
> Hi,
>
> So, I'm trying to understand - this is an issue with
> PersistenceSpecification or Fluent NHibernate, not a problem with
> NHibernate itself, correct? My complete entity heirarchy seems to be
> working in my application - I just can't figure out how to use
> PersistenceSpecification to test it.
>
> thanks!
> Bill
>
> On Mar 23, 2:09 pm, Bill <agilemeis...@gmail.com> wrote:
> > Thanks again James. I really appreciate all you're doing to try and
> > help. I understand the trial and error part.  :)
> >
> > I tried using a single ID instead of the composite and get the same
> > error. But from what Derik said, it looks like I am still using the
> > ProjectID key in both places. Here's my latest map file:
> >
> >     public class RouteObjMap : ClassMap<RouteObjNH>
> >     {
> >         public RouteObjMap()
> >         {
> >             WithTable("Route");
> >
> >             Id(x => x.ProjectID);
> >             Map(x => x.RouteID);
> >             Map(x => x.StartTime);
> >             Map(x => x.SlackTime);
> >             Map(x => x.VehicleId);
> >             Map(x => x.MilesTraveled);
> >
> >             // Reference back to parent Project
> >             References(x => x.Project).Cascade.All()
> >                 .WithForeignKey("ProjectID").WithColumns("ProjectID");
> >         }
> >     }
> >
> > Here's the XML
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="vRA,
> > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
> > namespace="vRA.Domain">
> >   <class name="RouteObjNH" table="Route" xmlns="urn:nhibernate-
> > mapping-2.2">
> >     <id name="ProjectID" type="String" column="ProjectID">
> >       <generator class="assigned" />
> >     </id>
> >     <property name="RouteID" type="String">
> >       <column name="RouteID" />
> >     </property>
> >     <property name="VehicleId" type="String">
> >       <column name="VehicleId" />
> >     </property>
> >     <property name="StartTime" type="DateTime">
> >       <column name="StartTime" />
> >     </property>
> >     <property name="SlackTime" type="Int32">
> >       <column name="SlackTime" />
> >     </property>
> >     <property name="MilesTraveled" type="Int32">
> >       <column name="MilesTraveled" />
> >     </property>
> >     <many-to-one cascade="all" foreign-key="ProjectID" name="Project">
> >       <column name="ProjectID" />
> >     </many-to-one>
> >   </class>
> > </hibernate-mapping>
> >
> > The way that I had my mapping files previously let me get the entire
> > heirarchy of classes starting at the Project class level. It's just
> > that the PersistenceSpecificaion didn't seem to work to valid them.
> >
> > I'm still getting the same error:
> >
> > System.IndexOutOfRangeException: Invalid index 6 for this
> > SqlParameterCollection with Count=6..
> >
> > Here is my test:
> >
> >         private Project _project = new Project()            {
> >                 ProjectID = "12345",
> >                 UserID = "PL\\600124238",
> >                 MachineName = "GCR1MG1",
> >                 NodeType = 1,
> >                 FullPath = "/AllProjects/",
> >                 FlagSelected = 1,
> >                 SequenceNo = 0,
> >                 TimeCreated = dt
> >             };
> >
> >         [TestMethod]
> >         public void VerifyRouteObjSaves()
> >         {
> >             DateTime dt = new DateTime(2009, 3, 20);
> >
> >             ISessionBuilder sessionBuilder = new SessionBuilder();
> >             ISession session = sessionBuilder.GetSession
> > (vRADatabase.Default);
> >
> >             new PersistenceSpecification<RouteObjNH>(session)
> >                 .CheckProperty(x => x.ProjectID, "23456")
> >                 .CheckProperty(x => x.RouteID, "R00001")
> >                 .CheckProperty(x => x.StartTime, dt)
> >                 .CheckReference(x => x.Project, _project)
> >                 .VerifyTheMappings();
> >         }
> >
> > thanks!!
> > Bill
> >
> > On Mar 23, 9:36 am, James Gregory <jagregory....@gmail.com> wrote:
> >
> >
> >
> > > My mistake, I've just looked at the code and WithForeignKey is for
> setting
> > > the actual constraint name, so that's my point out of the window.
> > > I'm guessing now it's a conflict between your composite-id and
> references,
> > > are you able to test the behavior if you use a regular identity over a
> > > composite one? This is all a bit trial-and-error, I know... :)
> >
> > > On Mon, Mar 23, 2009 at 1:14 PM, Bill <agilemeis...@gmail.com> wrote:
> >
> > > > Thanks James!
> >
> > > > This is an interesting problem. I can see the similarities to what I
> > > > have except that Derik's example is with a property... for mine it is
> > > > an identifier. If I remove the .WithColumns("ProjectID") then it
> > > > generates it's own column name like this:
> >
> > > >    <many-to-one cascade="all" name="Project" column="Project_id" />
> > > >    <bag name="lstRouteLocation" table="RouteLocation">
> > > >      <key foreign-key="RouteID">
> > > >        <column name="ProjectID" />
> > > >        <column name="RouteID" />
> > > >      </key>
> > > >      <one-to-many class="vRA.Domain.RouteLocationNH, vRA,
> > > > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
> > > >    </bag>
> >
> > > > This fails since it can't find that name:
> >
> > > > NHibernate.Exceptions.GenericADOException: could not insert:
> > > > [vRA.Domain.RouteObjNH][SQL: INSERT INTO Route (MilesTraveled,
> > > > VehicleId, SlackTime, StartTime, Project_id, ProjectID, RouteID)
> > > > VALUES (?, ?, ?, ?, ?, ?, ?)] --->
> > > > System.Data.SqlClient.SqlException: Invalid column name
> 'Project_id'..
> >
> > > > Interesting.
> >
> > > > Thanks!
> > > > Bill
> >
> > > > On Mar 23, 7:55 am, James Gregory <jagregory....@gmail.com> wrote:
> > > > > Sorry Bill, I was out last night and missed your last message.
> Derik
> > > > > Whittaker actually blogged very
> > > > > recently<
> > > >http://devlicio.us/blogs/derik_whittaker/archive/2009/03/19/nhibernat
> ..
> > > > .>on
> > > > > your exact error message. It's basically saying you're mapping a
> > > > > column
> > > > > twice. Which in your case, is probably in this line:
> > > > > References(x => x.Project).Cascade.All()
> > > > >
>  .WithForeignKey("ProjectID").WithColumns("ProjectID");
> >
> > > > > The WithForeignKey sets the foreign-key column, while the
> WithColumns
> > > > sets
> > > > > any additional colums. So you're essentially telling NHibernate
> that your
> > > > > relationship is made up of two columns (a composite reference), but
> > > > giving
> > > > > it the same column twice. I'd suggest trying to remove the
> WithColumns
> > > > and
> > > > > see what happens.
> >
> > > > > On Mon, Mar 23, 2009 at 2:37 AM, Bill <agilemeis...@gmail.com>
> wrote:
> >
> > > > > > I tried a bunch of things but really don't have a clue what that
> error
> > > > > > I am getting means. Maybe if I could see an example of using a
> HasMany
> > > > > > and then the Reference back with the PersistenceSpecification I
> could
> > > > > > make some sense of it. Not sure what else I might try. Any
> suggestions
> > > > > > would be appreciated.
> >
> > > > > > thanks,
> > > > > > Bill
> >
> > > > > > On Mar 22, 2:59 pm, Bill <agilemeis...@gmail.com> wrote:
> > > > > > > I set Cacasde.All() on the Reference like this:
> >
> > > > > > >             // Reference back to parent Project
> > > > > > >             References(x => x.Project).Cascade.All()
> >
> > > > .WithForeignKey("ProjectID").WithColumns("ProjectID");
> >
> > > > > > > I get the same error
> >
> > > > > > > System.IndexOutOfRangeException: Invalid index 6 for this
> > > > > > > SqlParameterCollection with Count=6..
> >
> > > > > > > Its creating the Project row in the database from the test.
> >
> > > > > > > Here's my class map file
> >
> > > > > > >     public class RouteObjMap : ClassMap<RouteObjNH>
> > > > > > >     {
> > > > > > >         public RouteObjMap()
> > > > > > >         {
> > > > > > >             WithTable("Route");
> > > > > > >             UseCompositeId()
> > > > > > >                 .WithKeyProperty(x => x.ProjectID)
> > > > > > >                 .WithKeyProperty(x => x.RouteID);
> >
> > > > > > >             Map(x => x.StartTime);
> > > > > > >             Map(x => x.SlackTime);
> > > > > > >             Map(x => x.VehicleId);
> > > > > > >             Map(x => x.MilesTraveled);
> >
> > > > > > >             // Reference back to parent Project
> > > > > > >             References(x => x.Project).Cascade.All()
> >
> > > > .WithForeignKey("ProjectID").WithColumns("ProjectID");
> >
> > > > > > >             // Child List of Route Locations
> > > > > > >             HasMany(x => x.lstRouteLocation)
> > > > > > >                .WithTableName("RouteLocation")
> > > > > > >                .WithForeignKeyConstraintName("ProjectID")
> > > > > > >                .WithForeignKeyConstraintName("RouteID")
> > > > > > >                .KeyColumnNames.Add("ProjectID", "RouteID");
> > > > > > >         }
> >
> > > > > > > And my test
> >
> > > > > > >         public void VerifyRouteObjSaves()
> > > > > > >         {
> > > > > > >             DateTime dt = new DateTime(2009, 3, 20);
> > > > > > >             var repository = new
> NHibernateRepository<RouteObjNH>
> > > > > > > (UnitOfWorkFactoryInstance, vRADatabase.Default);
> > > > > > >                 using (var transaction =
> > > > > > > UnitOfWorkFactoryInstance.GetSession(vRADatabase.Default))
> > > > > > >                 {
> > > > > > >                     ISessionBuilder sessionBuilder = new
> > > > SessionBuilder
> > > > > > > ();
> > > > > > >                     ISession session =
> sessionBuilder.GetSession
> > > > > > > (vRADatabase.Default);
> >
> > > > > > >                     new
> PersistenceSpecification<RouteObjNH>(session)
> > > > > > >                         .CheckProperty(x => x.ProjectID,
> "12345")
> > > > > > >                         .CheckProperty(x => x.RouteID,
> "R00001")
> > > > > > >                         .CheckProperty(x => x.StartTime, dt)
> > > > > > >                         .CheckProperty(x => x.SlackTime, 420)
> > > > > > >                         .CheckProperty(x => x.VehicleId,
> "53LTL")
> > > > > > >                         .CheckProperty(x => x.MilesTraveled,
> 34)
> > > > > > >                         .CheckReference(x => x.Project,
> _project)
> > > > > > >                         .VerifyTheMappings();
> > > > > > >                 }
> >
> > > > > > > thanks!
> > > > > > > Bill
> >
> > > > > > > On Mar 22, 2:42 pm, James Gregory <jagregory....@gmail.com>
> wrote:
> >
> > > > > > > > Hmm, try setting a Cascade on that relationship.
> >
> > > > > > > > On Sun, Mar
> >
> > ...
> >
> > read more ยป- Hide quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to