Docs 菜单

升级到版本 3.0

本页介绍将.NET/ C#驱动程序升级到版本 3.0 时,您可能需要对应用程序进行的更改。

本页列出了.NET/ C#驱动程序版本 3.0 引入的潜在重大更改。要将.NET/ C#驱动程序升级到版本 3.0,请按照以下步骤操作:

  1. 查看“兼容性”页面,确保新的驾驶员版本与应用程序连接到的MongoDB Server版本以及应用程序运行所在的.NET或.NET框架版本兼容。

  2. 如果您使用的是 2 .x 版本的.NET/ C#驱动程序,请升级到 v 2.30。为此,请遵循 v2 .x升级指南。

  3. 解决 版本3.0 重大更改部分中描述的重大更改。

    例子

    如果您要将驾驶员从 v 2.14 升级到 v 3.0,请先使用 v 2 .x升级指南,将驾驶员升级到 v 2.30。然后,解决v 3.0 的所有重大更改。

  • 该驾驶员不再支持MongoDB Server v 3.6 及更早版本。您必须将MongoDB Server升级到 4.0 或更高版本。

    如要了解如何升级 MongoDB Server 部署,请参阅 MongoDB Server 手册中的发行说明

    如要进一步了解 .NET/C# 驱动程序版本与 MongoDB Server 版本之间的兼容性,请访问兼容性页面。

  • 该驾驶员删除了对.NET Core 2 .x 和.NET Framework 4.6 的支持。您必须升级到.NET Core 3 .x 或更高版本,或者.NET Framework 4.7.2 或更高版本。

    要详细学习;了解.NET/ C#驾驶员版本和.NET版本之间的兼容性,请访问兼容性页面。

  • 驾驶员删除了 mongocsharpdriver NuGet包,该包实现了旧版 v1 .x驾驶员版本 2 .x 中的API 。如果您使用的是 v 1 .xAPI,您必须迁移到新API。

  • MongoDB.Driver.Core命名空间中的类、方法和属性在 v 2.30 中已弃用,并被标记为 internal。如果驾驶员为已弃用的类、方法或属性提供了替代项,则 v 2.30 中的编译器消息将显示它。

  • 先前版本的驾驶员中已弃用的 MongoDB.Bson命名空间中的方法、属性和构造函数已被删除。如果驾驶员提供了已弃用的方法、属性或构造函数的替代项,则 v 2.30 中的编译器消息将显示它。

  • 该驾驶员不再支持MONGODB-CR身份验证机制。要学习;了解有关在.NET/ C#驱动程序中配置身份验证的更多信息,请参阅身份验证机制。

  • 驾驶员将 IMongoQueryable 接口替换为 IQueryable 接口,遵循大多数其他 LINQ 提供程序使用的模式。如果您的应用程序包含对 IMongoQueryable 的引用,请将其替换为 IQueryable

  • 驾驶员删除了 ClusterBuilder.ConfigureSdamLogging() 方法。要在应用程序中配置日志记录,请参阅日志记录指南。

  • LINQ 2提供商已从此版本的驾驶员中删除。必须对所有 LINQ 查询使用 LINQ 3。

    默认下,使用客户端投影的查询会引发 ExpressionNotSupportedException 错误。 要启用客户端投影,请将 TranslationOptions对象的 EnableClientSideProjections属性设立为 true。 您可以将此 TranslationOptions对象传递给 AggregateOptionsFindOptions对象,为单个查询启用客户端投影,或者传递给 MongoClientSettings对象,为应用程序中的所有查询启用客户端投影。

  • 上一个版本的.NET/ C#驱动程序支持两种 GUID 表示模式。 在版本 3.0 中,GuidRepresentationMode.V3 是唯一支持的模式。此更改对驾驶员有以下影响:

    • BsonBinaryData(Guid) 构造函数已被删除。要从 GUID 构造 BsonBinaryData对象,请使用 BsonBinaryData.Create(Guid, GuidRepresentation) 构造函数。

    • BsonBinaryData.GuidRepresentation属性已被删除。

    • 您只能对子类型为 4 的 BsonBinaryData 对象调用 BsonBinaryData.ToGuid() 方法。如果对象具有任何其他子类型,则必须调用 BsonBinaryData.ToGuid(GuidRepresentation) 方法并指定子类型。

    • 已删除使用 BsonTypeMapper 类进行 GUID 转换。 要将 GUID 值转换为BSON,请使用 BsonBinaryData(<GUID>, GuidRepresentation.Standard) 构造函数。

    仅当您直接序列化和反序列化BSON文档时,上述更改才会影响您的应用程序。 如果您仅将MongoDB文档映射到 POCO,则 GuidRepresentationMode不会影响您的应用程序。

    要学习;了解有关在.NET/ C#驱动程序中序列化 GUID 的更多信息,请参阅 GUID 页面。

  • 异常类及其相关类型不再包含 [Serializable] 属性,因此不再支持Microsoft旧版序列化API。要学习;了解如何使用.NET/ C#驱动程序序列化对象,请参阅序列化指南。

  • 不再支持 TLS 1.0 和 1.1。您必须使用 TLS 1.2 或更高版本。要学习;了解有关在.NET/ C#驱动程序中配置 TLS/SSL 的更多信息,请参阅在连接上启用 TLS。

  • 默认,驾驶员将 Decimal128decimal 值序列化为BSON Decimal128 值。在以前版本的驾驶员中,驾驶员默认将这些值序列化为BSON string 值。要将decimalDecimal128 值序列化为string v3.0 中的字符串,应用[BsonRepresentation(BsonType.String)] 属性应用于字段。

    BSON types要学习;了解有关在序列化期间指定BSON 类型的更多信息,请参阅 POCO 页面的自定义序列化部分。

  • 默认,驾驶员将 DateTimeOffset 值序列化为BSON文档。在以前版本的驾驶员中,驾驶员默认将这些值序列化为BSON数组。 要将 DateTimeOffset 值序列化为 v 3.0 中的大量,应用[BsonRepresentation(BsonType.Array)] 属性应用于字段。

  • JSON默认JSON输出模式为宽松扩展JSONJSON stringJSONBSON,这是一种基于描述BSON文档的JSON标准的字符串格式。宽松扩展JSON强调可读性和互操作性,但牺牲了类型保留。

    要使用不同的JSON输出模式,请创建一个新的 JsonWriterSettings对象。将此对象的 OutputMode属性设置为 JsonOutputMode枚举中的值,然后在序列化文档时将该对象传递给 ToJson() 方法。以下代码示例展示了如何将BSON文档序列化为 Strict JSON:

    // Configure JsonWriterSettings
    var jsonWriterSettings = new JsonWriterSettings
    {
    OutputMode = JsonOutputMode.Strict
    };
    // Serialize the document to JSON using the configured settings
    var json = document.ToJson(jsonWriterSettings);
  • MongoClient 构造函数只接受一个 Credential对象,而不是大量。

  • 要使用Amazon Web Services (Amazon Web Services)身份验证,您必须将 MongoDB.Driver.Authentication.AWS包添加到项目中,并在应用程序的引导代码中注册身份验证提供者。 要学习;了解有关通过.NET/ C#驱动程序使用Amazon Web Services身份验证的更多信息,请参阅Amazon Web Services身份和访问管理。

  • 要使用In-正在使用的加密,您必须将 MongoDB.Driver.Encryption包添加到您的项目中,并在应用程序的引导代码中注册加密机制。要学习;了解有关在.NET .NET/C# C#驱动程序中使用正在使用的加密的更多信息,请参阅MongoDBMongoDB Server Server手册中的正在使用的正在使用的加密。

  • 如果尝试将浮点 InfinityNaN 值序列化或反序列化为整数表示形式,驾驶员会抛出 OverflowException 。要学习;了解有关浮点InfinityNaN 值的更多信息,请参阅 Double.NaN、Double.PositiveInfinity Double.NegativeInfinity。在 MSDN 上。

  • 该驾驶员包含对 BsonValue 类的以下更改:

  • 驾驶员会从 MongoClient.Cluster 中删除单个集群事件。 要侦听集群事件,请调用 ClusterBuilder.Subscribe() 方法。

  • 如果集合中的任何类型使用标量鉴别器,并且您对该集合执行以下任一操作,驾驶员都会引发异常:

    • 调用 Aggregate().OfType<T>() 方法,如以下示例所示:

      collection.Aggregate().OfType<T>()
    • 调用 Aggregate().Match(item => item is T) 方法,如以下示例所示:

      collection.Aggregate().Match(item => item is T)

    要对集合使用上述任一方法,可以应用集合中的每个类。 请参阅多态对象页面以学习;了解方法。

    或者,您可以通过不同的方式检查每个项目的类型。 示例,您可以调用 Where() 方法并传递一个表达式,将项目的类型与您要查找的类型进行比较,如下示例所示:

    collection.AsQueryable().Where(item => item.GetType() == typeof(T));

    要学习;了解有关类型鉴别器的更多信息,请参阅多态对象。

  • 驾驶员使用继承密封了某些不适合扩展的类型。 这包括以下更改:

    • 驾驶员会封装所有具体序列化器。 要实现自定义序列化器,实现IBsonSerializer 接口。

    • 驾驶员封装了 MongoClientMongoDatabaseMongoCollection 类。 我们建议直接使用 IMongoClientIMongoDatabaseIMongoCollection 接口。

  • 驾驶员要求应用程序使用 GuidSerializerObjectSerializer 类显式配置如何序列化 GUID。 构建新应用程序的.NET/ C#驱动程序用户可以通过注册来实现全局 GuidSerializer。 我们建议使用较旧应用程序的用户在实施全局 GuidSerializer 时验证所有 GUIDs 是否都以相同的方式进行序列化。 您还可以根据具体情况配置 GUID 序列化,而无需注册全局 GuidSerializer

    要学习;了解有关 GUID 序列化的更多信息,请参阅 GUID指南。