ben*_*ree 5 c# circular-reference ravendb
我正在使用RavenDB与以下模型:
public class Cart {
List<Item> Items = new List<Item>();
}
public class Item {
public Cart Cart;
}
Run Code Online (Sandbox Code Playgroud)
当我添加Item到a时Cart,我将关系的两侧连接起来.
RavenDB如何处理序列化和反序列化? 引用Cart是自动分配还是有方法在加载时手动连接?
如果您保存购物车,则在拨打电话时会收到"检测到自我参考循环..."的异常SaveChanges().
修复很容易.您将该[JsonObject(IsReference = true)]属性添加到购物车.这告诉序列化程序将Item的Cart存储为引用而不是新对象.
[JsonObject(IsReference = true)]
public class Cart
{
public List<Item> Items = new List<Item>();
}
public class Item
{
public Cart Cart;
}
Run Code Online (Sandbox Code Playgroud)
我还想提一下,它是属性反序列化的.换句话说,Cart在加载时会重新分配给Item.
var cart = new Cart();
cart.Items.Add(new Item { Cart = cart });
session.Store(cart);
session.SaveChanges();
...
var cart = session.Query<Cart>().First();
Assert.ReferenceEquals(cart, cart.Items.First().Cart); //this works
Run Code Online (Sandbox Code Playgroud)