假设我有这样的模型:
public class Item
{
public Guid Id { get;set;}
public string Title { get;set;}
public List<Comment> Comments { get;set;}
}
使用官方驱动程序保存到Mongo时,注释最终将作为嵌入式子文档。我不希望有人添加注释来要求保存整个文档,所以我写了一个原子部分更新方法:
public void AddComment(Item item, Comment comment)
{
Collection.Update(
Query.EQ("_id", item.Id),
Update.AddToSet("Comments",
BsonValue.Create(comment)));
}
但是,我不确定如何为Mongo驱动程序指定使用这些就地更新维护“注释”,并且如果在父文档上调用Save()则不应该保留。
我可以用属性装饰属性吗?或者我将被迫编写一个更新方法,指定我想要手动更新的所有属性。
答案 0 :(得分:1)
您可以在项目类中指定ShouldSerializeXyz
方法,如下所示:
public bool ShouldSerializeComments() {
return false;
}
然后当你保存对象时,驱动程序永远不会序列化注释。
或者另一个选项是在保存之前将注释设置为null并使用BsonIgnoreIfNull属性
public class Item
{
...
[BsonIgnoreIfNull]
public List<Comment> Comments { get;set;}
}
...
obj.Comments = null;
collection.Save(obj);