更新Mongo驱动程序后Update.Setwrap中的空引用异常

时间:2012-05-23 23:32:39

标签: c#-4.0 mongodb

我在Mongo-C#环境中,我们使用Mongo 1.3.x DLL对Mongo进行了一段时间的编码。最近,我把它更新为1.4.2,其他一切都很好,直到我遇到一个问题,我注意到以前版本的Mongo DLL正在处理

update.SetWrapped(property.Name, value);

当值为null但最近版本不喜欢它时所有文件都会抛出null引用异常。

问题在于我希望它能够接受Null值。以前有人遇到过这个问题吗?如果是的话,你是怎么处理的?

2 个答案:

答案 0 :(得分:1)

引入这个时有一个突破性的变化。你需要使用BsonNull.Value。所以,你的代码看起来像这样:

update.SetWrapped(property.Name, BsonValue.Create(value) ?? BsonNull.Value);

答案 1 :(得分:0)

我相信你应该能够将C#null传递给Update.SetWrapped< T>因为T是POCO而不是BsonValue,而T的序列化器将决定如何序列化C#null。

我为此创建了一张JIRA票:

https://jira.mongodb.org/browse/CSHARP-486

请注意,虽然早于1.4的C#驱动程序版本没有抛出NullReferenceException,但它们也没有像您预期的那样将属性更新为BSON null(将C#null传递给SetWrapped,在早期版本中将SetWrapped转换为no-op )。

C#null处理的基本规则很明确:

  1. C#null不是有效的BsonValue,而是使用BsonNull.Value
  2. C#null对POCO有效,并且可能被序列化为BSON null(虽然技术上POCO的序列化器可以选择不同的表示)