It is pretty common, especially in applications with an ORM, to have a two way mapping between classes. Like this:
public class Product
{
private List
I am just now working on a problem similar to this and I am using #3 in LBushkin's answer.
I have a data storage object with lists for all of my data classes. The data classes have ids in them for references to the other classes and I call back to the data storage class to get the reference item.
I have found this really useful because I need to be able to filter the data and that is done when requesting the data from the data storage.