Thanks I'll look into it, I think I'll go to mapping now I've got a jist of the setting up of data between my classes etc!
Cheers! On Jun 10, 4:23 pm, Hudson Akridge <[email protected]> wrote: > Ah, the cascade needs to be set to all, or all-delete-orphan on the bag > mapping. You can do this by convention on the automapper config (I don't > have it off the top of my head, but check into the automap conventions). You > want to set the .Cascade.All() or .Cascade.AllDeleteOrphan() on collections. > Again, this is assuming you: > 1.) Don't want a bi-directional back from asset to vehicle, in which case > you need to declare the collection as inverse, and the reference to the > parent as save-update for persisting > 2.) Don't want to use actual fluent mappings, which if you get any more > complex than this, should probably be the direction you head. It'll give you > more control over your mappings, and is an easy step from automapping. > > > > On Wed, Jun 10, 2009 at 10:16 AM, Sarkie <[email protected]> wrote: > > > It was doing Save, I changed to SaveOrUpdate and still the same. > > > It is the Vehicle_id in the Asset table, i.e. in the Child. > > > and here is the config > > > Vehicle > > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default- > > access=""> > > <class name="ThalesAssetTracking.Core.Entities.Vehicle, > > ThalesAssetTracking.Core, Version=1.0.0.0, Culture=neutral, > > PublicKeyToken=null" table="`Vehicle`" xmlns="urn:nhibernate- > > mapping-2.2"> > > <id name="Id" type="Int32" column="Id"> > > <generator class="identity" /> > > </id> > > <property name="Name" type="String"> > > <column name="Name" /> > > </property> > > <property name="Description" type="String"> > > <column name="Description" /> > > </property> > > <many-to-one name="Image" column="Image_id" /> > > <many-to-one name="DrawingImage" column="DrawingImage_id" /> > > <bag name="CurrentAssets"> > > <key column="Vehicle_id" /> > > <one-to-many class="ThalesAssetTracking.Core.Entities.Asset, > > ThalesAssetTracking.Core, Version=1.0.0.0, Culture=neutral, > > PublicKeyToken=null" /> > > </bag> > > </class> > > </hibernate-mapping> > > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default- > > access=""> > > <class name="ThalesAssetTracking.Core.Entities.Asset, > > ThalesAssetTracking.Core, Version=1.0.0.0, Culture=neutral, > > PublicKeyToken=null" table="`Asset`" xmlns="urn:nhibernate- > > mapping-2.2"> > > <id name="Id" type="Int32" column="Id"> > > <generator class="identity" /> > > </id> > > <property name="Name" type="String"> > > <column name="Name" /> > > </property> > > <property name="Number" type="String"> > > <column name="Number" /> > > </property> > > <many-to-one name="AssetType" column="AssetType_id" /> > > </class> > > </hibernate-mapping> > > > I am guessing the settings for the one-to-many is wrong? > > > Cheers, Sarkie. > > > On Jun 10, 3:54 pm, Hudson Akridge <[email protected]> wrote: > > > In your vehicles repository, is the .Add(veh1) calling the > > > session.SaveOrUpdate(veh1)? If so, then is the Vehicle_Id column you're > > > describing as being empty in the vehicles table or the assets table? > > > > Could you do an .ExportTo() in the config and post the vehicle and asset > > > mappings that automapper is generating for you? It's possible that it's > > > setting the collection side as an inverse (in NHibernate lingo it means > > it > > > won't save from the parent side of the relationship, it expects the child > > to > > > save the association) You might also try doing this as a bi-directional > > by > > > adding a reference back to vehicle from asset (although you shouldn't > > have > > > to by default). > > > > On Wed, Jun 10, 2009 at 5:27 AM, Sarkie <[email protected]> wrote: > > > > > Hi Guys, > > > > > Just started a new project and decided I wanted to give Nhibernate a > > > > try after trying out Entity Framework, I was told by everyone to use > > > > Fluent instead( as well). > > > > > So I am just trying to develop a simple app and I've come across an > > > > issue with the AutoMapping, reading the Examples.FirstProject it > > > > *should* work, but I am using AutoMapping rather than manually doing > > > > it. > > > > > Here is my Parent - Vehicle: > > > > > public class Vehicle > > > > { > > > > public virtual int Id { get; private set; } > > > > public virtual Image Image { get; set; } > > > > public virtual Image DrawingImage { get; set; } > > > > public virtual string Name { get; set; } > > > > public virtual string Description { get; set; } > > > > > public virtual IList<Asset> CurrentAssets {get; private set;} > > > > > public Vehicle() > > > > { > > > > CurrentAssets = new List<Asset>(); > > > > } > > > > > public virtual void AddAsset(Asset asset) > > > > { > > > > CurrentAssets.Add(asset); > > > > } > > > > > } > > > > > Here is my Child - Asset > > > > > public class Asset > > > > { > > > > public virtual int Id { get; private set; } > > > > public virtual string Name { get; set; } > > > > public virtual string Number { get; set; } > > > > } > > > > > Here is my configuration > > > > > FluentConfiguration fs = Fluently.Configure() > > > > .Database(MsSqlConfiguration.MsSql2005 > > > > .ConnectionString(c => c > > > > .Server("servername") > > > > .Database("dbname") > > > > .Username("us") > > > > .Password("pw"))) > > > > .Mappings(m => > > > > m.AutoMappings.Add( > > > > AutoPersistenceModel > > > > .MapEntitiesFromAssemblyOf<Asset>() > > > > .Where(t => t.Namespace == > > > > "AssetTracking.Core.Entities"))); > > > > > I then do the insertion: > > > > > UnitOfWork.UnitOfWork.Start(); > > > > > Repository<Vehicle> vehicles = new Repository<Vehicle>(); > > > > > var veh1Asset = new Asset > > > > { > > > > AssetType = assetType, > > > > Name = "Asset 1", > > > > Number = "123", > > > > > }; > > > > > //Repository<Asset> assets = new Repository<Asset>(); > > > > //assets.Add(veh1Asset); > > > > > //List<Asset> assList = new List<Asset>(); > > > > //assList.Add(veh1Asset); > > > > > // add 2 vehicles > > > > var veh1 = new Vehicle > > > > { > > > > Description = "Truck 101, this is a long standing blah > > > > blah blah", > > > > Name = "Truck 101", > > > > Image = veh1Image, > > > > DrawingImage = vehImage2, > > > > > }; > > > > > veh1.AddAsset(veh1Asset); > > > > > vehicles.Add(veh1); > > > > } > > > > > Now I've tried adding it different ways before and after and in any > > > > case I try, the Vehicle_Id is always null in the DB. > > > > > Am I missing something? > > > > > Sorry if I've missed something simple!! > > > > > Cheers, Sarkie. > > > > -- > > > - Hudsonhttp://www.bestguesstheory.comhttp://twitter.com/HudsonAkridge > > -- > - Hudsonhttp://www.bestguesstheory.comhttp://twitter.com/HudsonAkridge --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" 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/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---
