I am using NHibernate to bulk-insert rows into my database. Because of the amount of data I am inserting, I am using IStatelessSession instead of ISession. The objects I am inserting use assigned identities (ie no hilo or guids generated -- the unique ids are assigned to the objects).
My problem is that I have an object (say Foo) which has a many-to-one reference to another object (say Bar). I insert all of the Bar objects first and that is no problem.
The problem comes when I want to insert the Foo objects. I know the unique identifier of each Bar object, but I don't want to have to retrieve each Bar object from the database in order to set the property on the Foo object before inserting it.
Now might be a good time to show a simple example:
public class Foo {
// Unique identifier (assigned)
public virtual int Id { get; set; }
// Many-to-one reference to a Bar object
public virtual Bar Bar { get; set; }
}
public class Bar {
// Unique identifier (assigned)
public virtual int Id { get; set; }
}
Let's say that I want to create a new Foo object with an Id of (say) 1234 that references a Bar object that has an Id of (say) 4567. I know that there is already a Bar object with this identifier because I have added all the Bar objects previously.
How do I go about adding the Foo object without having to retrieve the Bar object from the database again?
Strange that sometimes if you take the time to formulate your question, you realise the answer shortly after.
What you do is create a dummy object that has the Id and nothing else set.
STEP 1: Insert the Bar Object
STEP 2: Insert the Foo Object with a dummy Bar object
But if anyone has a better way (for example, that does not require creating lots of dummy objects), I'd be grateful for advice.