【问题标题】:Nullreference exception in Update.Setwrap after updating Mongo Driver更新 Mongo 驱动程序后 Update.Setwrap 中的 Nullreference 异常
【发布时间】:2012-06-04 23:21:39
【问题描述】:

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

update.SetWrapped(property.Name, value);

值为 null 但最新版本不喜欢它的所有文件,它会引发 nullreference 异常。

这里的问题是我希望它能够接受 Null 值。以前有人遇到过这个问题吗?如果是,您是如何处理的?

【问题讨论】:

    标签: c#-4.0 mongodb


    【解决方案1】:

    引入此功能时发生了重大变化。您需要为此使用 BsonNull.Value 。因此,您的代码将如下所示:

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

    【讨论】:

    • 谢谢克雷格...我在网站上看到了...我不知道他们明确表示的可能原因是什么?它赚什么?
    • 嗯,在内部,.NET null 的处理方式与 BsonNull.Value 不同。它们在语义上意味着不同的东西,在某些情况下,它可能是模棱两可的。因此,有一些规则将在下一个版本 (1.5) 中得到澄清。 1) 使用 BsonDocument(无类型文档)时,null 是非法的。 2) 使用 Classes(类型化文档)时,null 被映射到 BsonNull。
    【解决方案2】:

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

    我为此创建了一个 JIRA 票证:

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

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

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

    1. C# null 不是有效的 BsonValue,请改用 BsonNull.Value
    2. C# null 对 POCO 有效,并且可能会被序列化为 BSON null(尽管从技术上讲,POCO 的序列化程序可以选择不同的表示)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 2016-02-08
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2023-03-21
      • 2014-11-05
      • 1970-01-01
      相关资源
      最近更新 更多