Serializing circular references in MongoDb
To serialize an object containing circular references to mongo, you need to set it to ignore the reference, and then initialize it during deserialization:
    [Test]
    public void CanSerializeCircularReferences()
    {
        var parent = new Parent();
        parent.Name = "Parent 1";
        parent.AddChild(new Child() { Name = "Child 1" });
        parent.AddChild(new Child() { Name = "Child 2" });
        var repository = new MongoRepository<Parent>("mongodb://localhost/tests");
        repository.Add(parent);
        var parent2 = repository.GetSingle(p => p.Name == "Parent 1");
        Assert.That(parent2, Is.Not.Null);
        Assert.That(parent2.Children[0].Father,Is.EqualTo(parent2));
    }
public class Parent : Entity, ISupportInitialize
{
    private List<Child> children = new List<Child>();
    public string Name { get; set; }
    public List<Child> Children
    {
        get { return children; }
        set { children = value; }
    }
    public void AddChild(Child toAdd)
    {
        Children.Add(toAdd);
        toAdd.Father = this;
    }
    public void BeginInit()
    {
        return;
    }
    public void EndInit()
    {
        this.Children.ForEach(child => child.Father=this);
    }
}
public class Child
{
    public string Name { get; set; }
    [BsonIgnore]
    public Parent Father { get; set; }
}Written by Sergio Costa
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
 #Mongodb 
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#
 
 
 
 
