バージョン 3.0 にアップグレード
Overview
このページでは、 .NET/ C#ドライバーをバージョン 3.0 にアップグレードするときにアプリケーションに加える必要がある変更について説明します。
アップグレード方法
このページでは、 .NET/ C#ドライバー バージョン 3.0 によって導入される可能性のある重大な変更をリストします。.NET/ C#ドライバーをバージョン 3.0 にアップグレードするには、次の手順に従います。
[ 互換性 ] ページを確認して、新しいドライバー バージョンが、アプリケーションが接続するMongoDB Serverのバージョン およびアプリケーションが実行される.NETまたは.NETフレームワークのバージョンと互換性があることを確認します。
.NET/ C#ドライバーの 2 .x バージョンを使用している場合は、 v 2.30 にアップグレードします。これを行うには、 v2 .x アップグレードガイドに従います。
バージョン3.0 の重大な変更 セクションで説明されている重大な変更に対処します。
例
ドライバーを v2.14 から v3.0 にアップグレードする場合は、まず v2 .xドライバーを v 2.30 にアップグレードするためのアップグレードガイド。次に、v 3.0 のすべての重大な変更に対処します。
バージョン3.0 重大な変更
ドライバーはMongoDB Server v 3.6 以前のサポートを削除します。MongoDB Serverは v 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のバージョンの互換性の詳細については、 互換性 ページをご覧ください。
このドライバーでは、レガシーv1 .x を実装する mongoshardr NuGetパッケージが削除されます。ドライバー バージョン 2 .x のAPIv 1 .x を使用している場合APIにある場合は、新しいAPIに移行する必要があります。
v で非推奨となった 名前空間内のクラス、メソッド、プロパティは
MongoDB.Driver.Core
2.30internal
とマークされています。ドライバーが非推奨のクラス、メソッド、またはプロパティの代替を提供する場合、 v 2.30 のコンパイラー メッセージにそれが表示されます。ドライバーの以前のバージョンで非推奨だった
MongoDB.Bson
名前空間内のメソッド、プロパティ、コンストラクターが削除されました。ドライバーが非推奨のメソッド、プロパティ、またはコンストラクターの代替を提供する場合、v 2.30 のコンパイラー メッセージにそれが表示されます。ドライバーは
MONGODB-CR
認証メカニズムのサポートを削除します。.NET/ C#ドライバーで認証を構成する方法の詳細については、「 認証メカニズム 」を参照してください。ドライバーは、他のほとんどの LINQ プロバイダーで使用されるパターンに従って、
IMongoQueryable
インターフェースをIQueryable
インターフェースに置き換えます。アプリケーションにIMongoQueryable
への参照が含まれている場合は、IQueryable
に置き換えます。ドライバーは
ClusterBuilder.ConfigureSdamLogging()
メソッドを削除します。アプリケーションでログを構成するには 、「 ログガイド」を参照してください。LINQ 2 プロバイダーはこのバージョンのドライバーから削除されました。すべての LINQ クエリに LINQ 3 を使用する必要があります。
クライアント側のプロジェクションを使用するクエリでは、デフォルトで
ExpressionNotSupportedException
エラーがスローされます。 クライアント側のプロジェクションを有効にするには、TranslationOptions
オブジェクトのEnableClientSideProjections
プロパティをtrue
に設定します。 このTranslationOptions
オブジェクトをAggregateOptions
またはFindOptions
オブジェクトに渡して 1 つのクエリでクライアント側のプロジェクションを有効にするか、MongoClientSettings
オブジェクトに渡してアプリケーション内のすべてのクエリに対してクライアント側のプロジェクションを有効にします。.NET/ C#ドライバーの以前のバージョンでは、2 つの GUID 表現モードがサポートされていました。 バージョン 3.0 では、サポートされているモードは
GuidRepresentationMode.V3
のみです。この変更は、ドライバーに次の影響を与えます。BsonBinaryData(Guid)
コンストラクターが削除されました。GUID からBsonBinaryData
オブジェクトを構築するには、BsonBinaryData.Create(Guid, GuidRepresentation)
コンストラクタを使用します。BsonBinaryData.GuidRepresentation
プロパティが削除されました。BsonBinaryData.ToGuid()
メソッドは、サブタイプ 4 のBsonBinaryData
オブジェクトでのみ呼び出しできます。オブジェクトに他のサブタイプがある場合は、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 として v 3.0 で直列化するには、フィールドに[BsonRepresentation(BsonType.String)]
属性を適用します。BSON types直列化化 中にBSON型を指定する方法の詳細については、 POCO ページの「 カスタム直列化 」セクションを参照してください。
デフォルトでは 、ドライバーは
DateTimeOffset
値をBSONドキュメントとして直列化します。以前のバージョンのドライバーでは、ドライバーはこれらの値をデフォルトでBSON配列として直列化していました。 v 3.0 でDateTimeOffset
値を配列として直列化するには、フィールドに[BsonRepresentation(BsonType.Array)]
属性を適用します。デフォルトのJSON出力モードは Relaxed Extended JSONで、 BSONドキュメントを記述するJSON標準に基づく string形式。 緩和型拡張JSONは、型の保存を犠牲にして、読みやすさと相互運用性を重視します。
別のJSON出力モードを使用するには、新しい
JsonWriterSettings
オブジェクトを作成します。このオブジェクトのOutputMode
プロパティをJsonOutputMode
列挙の値に設定し、ドキュメントを直列化するときにそのオブジェクトをToJson()
メソッドに渡します。次のコード例は、 BSONドキュメントを 厳密な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
コンストラクターは、配列ではなく 1 つのCredential
オブジェクトのみを受け入れます。Amazon Web Services (Amazon Web Services)の認証を使用するには、プロジェクトに
MongoDB.Driver.Authentication.AWS
パッケージを追加し、アプリケーションのブートストラップ コードに認証プロバイダを登録する必要があります。 .NET/ C#ドライバーでAmazon Web Services認証を使用する方法の詳細については、 「 Amazon Web Services ID とアクセス管理 」を参照してください。使用中の暗号化を使用するには、プロジェクトに
MongoDB.Driver.Encryption
パッケージを追加し、アプリケーションのブートストラップ コードに暗号化メカニズムを登録する必要があります。.NET/ C#ドライバーで使用中の使用中の暗号化する方法の詳細については、 MongoDB Serverマニュアルの「 使用中の使用中の暗号化」を参照してください。浮動小数点の
Infinity
またはNaN
の値を整数表現に直列化または逆直列化しようとすると、ドライバーはOverflowException
をスローします。浮動小数点のInfinity
とNaN
値の詳細については、Double. NaN、Double.PosativeInfinity、Double.NativeInfinity を参照してください。(MSDN の場合)。ドライバーには、
BsonValue
クラスに対する次の変更が含まれています。AsLocalTime
とAsUniversalTime
プロパティから[Obsolete]
属性を削除します。AsNullableLocalTime プロパティと AsNullableUniversalTime プロパティを追加します。
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
が同じ方法で直列化されていることを確認することをお勧めします。 グローバルGuidSerializer
を登録せずに、ケースごとにGUID
直列化を構成することもできます。GUID直列化の詳細については、「 GUIDガイド 」を参照してください。