升级到版本 3.0
Overview
本页介绍将.NET/ C#驱动程序升级到版本 3.0 时,您可能需要对应用程序进行的更改。
如何升级
本页列出了.NET/ C#驱动程序版本 3.0 引入的潜在重大更改。要将.NET/ C#驱动程序升级到版本 3.0,请按照以下步骤操作:
查看“兼容性”页面,确保新的驾驶员版本与应用程序连接到的MongoDB Server版本以及应用程序运行所在的.NET或.NET框架版本兼容。
如果您使用的是 2 .x 版本的.NET/ C#驱动程序,请升级到 v 2.30。为此,请遵循 v2 .x升级指南。
解决 版本3.0 重大更改部分中描述的重大更改。
例子
如果您要将驾驶员从 v 2.14 升级到 v 3.0,请先使用 v 2 .x升级指南,将驾驶员升级到 v 2.30。然后,解决v 3.0 的所有重大更改。
版本 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 或更高版本。
驾驶员删除了 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
对象传递给AggregateOptions
或FindOptions
对象,为单个查询启用客户端投影,或者传递给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。
默认,驾驶员将
Decimal128
和decimal
值序列化为BSONDecimal128
值。在以前版本的驾驶员中,驾驶员默认将这些值序列化为BSONstring
值。要将decimal
或Decimal128
值序列化为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手册中的正在使用的正在使用的加密。如果尝试将浮点
Infinity
或NaN
值序列化或反序列化为整数表示形式,驾驶员会抛出OverflowException
。要学习;了解有关浮点Infinity
和NaN
值的更多信息,请参阅 Double.NaN、Double.PositiveInfinity 和 Double.NegativeInfinity。在 MSDN 上。该驾驶员包含对
BsonValue
类的以下更改:从
AsLocalTime
和AsUniversalTime
属性中删除[Obsolete]
属性。删除
AsDateTime
属性。请改用 AsUniversalTime属性。删除
AsNullableDateTime
属性。请改用 AsNullableUniversalTime属性。
驾驶员会从
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
接口。驾驶员封装了
MongoClient
、MongoDatabase
和MongoCollection
类。 我们建议直接使用IMongoClient
、IMongoDatabase
和IMongoCollection
接口。
驾驶员要求应用程序使用
GuidSerializer
和ObjectSerializer
类显式配置如何序列化 GUID。 构建新应用程序的.NET/ C#驱动程序用户可以通过注册来实现全局GuidSerializer
。 我们建议使用较旧应用程序的用户在实施全局GuidSerializer
时验证所有GUIDs
是否都以相同的方式进行序列化。 您还可以根据具体情况配置GUID
序列化,而无需注册全局GuidSerializer
。要学习;了解有关 GUID 序列化的更多信息,请参阅 GUID指南。