我目前正在開發Mongo DB中的文檔存儲庫,其中包含特定項目的完整材料細目。計算分解幷包含複合結構。存儲複合/嵌套對象圖
域模型:
public interface IReagent
{
int ItemId { get; set; }
int Quantity { get; set; }
ConcurrentBag<IReagent> Reagents { get; set; }
}
public class Craft : IReagent
{
public int ItemId { get; set; }
public int Quantity { get; set; }
public int SpellId { get; set; }
public int Skill { get; set; }
public Profession Profession { get; set; }
public ConcurrentBag<IReagent> Reagents { get; set; }
}
public class Reagent : IReagent
{
public int ItemId { get; set; }
public int Quantity { get; set; }
public ConcurrentBag<IReagent> Reagents { get; set; }
}
現在的問題是,複合結構沒有被正確存儲。試劑在mongodb中保持爲空。
/* 28 */
{
"_id" : ObjectId("4e497efa97e8b617f0d229d4"),
"ItemId" : 52186,
"Quantity" : 0,
"SpellId" : 0,
"Skill" : 475,
"Profession" : 8,
"Reagents" : { }
}
它應該如何看
{
"_id" : ObjectId("4e497efa97e8b617f0d229d4"),
"ItemId" : 52186,
"Quantity" : 0,
"SpellId" : 0,
"Skill" : 475,
"Profession" : 8,
"Reagents" : [
{
"ItemId" : 521833,
"Quantity" : 3,
"SpellId" : 0,
"Skill" : 400,
"Profession" : 7,
"Reagents" : [
{
"ItemId" : 52186,
"Quantity" : 3,
"SpellId" : 0,
"Skill" : 475,
"Profession" : 8,
"Reagents" : [
{
"ItemId" : 52183,
"Quantity" : 2,
"Reagents" : []
},
{
"ItemId" : 521832,
"Quantity" : 1,
"Reagents" : []
}
]
},
{
"ItemId" : 52386,
"Quantity" : 2
"SpellId" : 0,
"Skill" : 400,
"Profession" : 8,
"Reagents" : [
{
"ItemId" : 52383,
"Quantity" : 2,
"Reagents" : []
},
{
"ItemId" : 523832,
"Quantity" : 1,
"Reagents" : []
}
]
}
]
}
]
}
這可能是什麼問題實例?
我假設傳入如果是非空?我可以檢查 - 你真的需要'ConcurrentBag'這裏嗎? '列表'不夠嗎?你可能會覺得它更開心嗎?請注意,我也懷疑'IReagant'是否是一個基本問題,除非它存儲了類型信息(即具體的反對類型),它不知道要重建什麼 –
當我在運行時調試時檢查「crafts」時,它包含一個複合結構。我正在使用MS的Parallel .NET 4.0 lib來計算對象圖,因此需要使用ConcurrentBag來避免使用鎖。我已經懷疑過這樣的事情了。它不會支持接口,但Craft也是一個實現的IReagent並被存儲。 –
存儲'Craft'的實例不同於存儲'IReagant'的實例,該實例恰好是* Craft'。特別是對於序列化庫(相信我; p) –