如果我想用POCO读写mongo数据
public class Thingy
{
public string Foo {get;set;}
}
...
coll.Insert(new Thing(Foo = "hello"));
Run Code Online (Sandbox Code Playgroud)
当我回读时,我得到一个失败,说_id是一个意外的属性(它是).然后我在课堂上添加了一个名为_id的字段.现在插入不起作用,说_id字段不能为null.一个尝试过的BsonIgnoreIfNull属性,它没有用.
Chr*_*tow 61
插入对象时,如果它没有_id字段,则驱动程序会添加一个并将其设置为12字节的MongoDB ObjectId值.
您只需要Id在POCO中添加一个属性,该属性将从以下位置反序列化_id:
public class Thingy
{
public ObjectId Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想委托另一个属性进行映射,_id那么您可以使用它来装饰它BsonIdAttribute,如下所示:
[BsonId]
public ObjectId MyKey { get; set; }
Run Code Online (Sandbox Code Playgroud)
该_id字段不必是MongoDB ObjectId,您可以将其设置为任何数据类型的任何值(数组除外),它只需要在集合中是唯一的.
小智 10
您必须为id添加属性(或字段)并告诉序列化程序您要使用哪个id生成器.
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
public object ThingyId { get; set; }
Run Code Online (Sandbox Code Playgroud)
MongoDb Driver中有3种可用,您也可以自己编写.更多信息,请访问http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-WriteacustomIdgenerator
小智 6
我通常包装 Thingy:
public class MongoThingy
{
public ObjectId Id { get; set; }
public Thingy Thingy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它使它变得容易得多,因为通常 Thingy 类来自我无法控制的不同库。反序列化以便将其交给其他人进行处理也更容易。
| 归档时间: |
|
| 查看次数: |
30171 次 |
| 最近记录: |