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