Sorry to butt in but is it something to do with the

.WithColumns("ProjectID");

in

References(x => x.Project).Cascade.All().WithForeignKey
("ProjectID").WithColumns("ProjectID");

I have just found that if I have a ParentID property in my Child
object and then use References(x => x.Parent, "ParentID").Cascade.All
() when mapping my Child that I get the same error you do.
I was doing this to try and automatically map the foreign key column
into the ParentID property but it actually produced 2 columns with the
same name which made it error.
This might be relevent.... Or it might not be.....


On Mar 25, 12:24 am, James Gregory <jagregory....@gmail.com> wrote:
> 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 =
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
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