質問: 問題/状況 ----- EF Coreを使用してデータベースから読み取る、非常に複雑なオブジェクト(バイナリフィールド、巨大なテキストなど)があります。これらのオブジェクトについては、挿入ステートメント(プレーン文字列テキスト)を生成して、それらをいくつかのファイルに保存し、後で別のデータベースで実行しようとしています。 C#で記述されたカスタム挿入ステートメント作成者がいますが、可能なフィールド/データ型をそれぞれ実装する必要があります。もちろん、不完全で不完全です。また、レコードごとにINSERTステートメントを実行するのではなく、複数のVALUESを持つ1つのINSERTを回避するために、レコードを手動で組み合わせる必要がありました。 そのため、データベースからオブジェクトを読み取るためにすでに使用しているため、このタスクまたは理想的にはEntityFrameworkにいくつかのライブラリを使用したいと思います。 必要なもの ----- 一部のライブラリ(またはEntityFrameworkの機能)は、一部のオブジェクトを渡して、そのオブジェクトに対応するINSERTステートメントを受け取ることができます。
回答: 私が知る限り、クエリからSQLを生成するEF Coreメソッドは、ほとんどが内部および実装に依存します(そしてプロバイダーに依存します。EFCoreは、特定のデータベースまたはSQL言語に直接関連していないことに注意してください)。 ..たとえば、ここには2.1の1つのメソッド(リフレクションを使用)があります。https : //stackoverflow.com/a/44180537/68972ですが、3.0のプレビューバージョンでは直接機能しません(内部クラスとプライベートフィールドが変更されているため)。 ただし、EF Coreは、 `SaveChanges`を呼び出すときに、生成されたSQLをログに記録します(DIで定義されたLoggerFactoryを使用します(使用可能な場合、または実際にはLoggerFactoryを手動で注入できます)。そのため、出力を`ILogger` (そして解析する)カスタム`ILogger`実装を作成できます。 SQLステートメントであることを確認し、それを外部ファイルに保存して、ダミーデータベースに接続されたDbContextにエンティティを挿入します(これらの挿入を実行する実際のデータベースで期待するのと同じプロバイダーを使用します)。ステートメントは後で)。