Start Debugging

タグ: ef-core-10

7 件

1つの EF Core プロジェクトで複数の DbContext ごとにマイグレーションフォルダーを分ける方法
DbContext ごとに --output-dir を一度だけ指定すれば、以降のマイグレーションは同じフォルダーと名前空間に作成されます。既定のレイアウトが偏る理由、共有フォルダーで発生する CS0111 の衝突、既存マイグレーションの移動方法、履歴テーブルを分けるべきタイミングを解説します。
EF Core が SQL Server の `date` 列を `DateOnly` と `DateTime` のどちらでスキャフォールドするかは何で決まるのか
決め手はスタートアッププロジェクトにある SQL Server プロバイダーの EF Core バージョンです。EF Core 7 以前は date を DateTime に、EF Core 8 から 11 までは DateOnly にスキャフォールドします。この判断を行う型マッピング、EF Core 7、8、10、11 RC 2 での実測出力、そして列を黙って datetime2 に再マッピングすることなく DateTime に戻す 2 つの方法を紹介します。
Npgsql を使う EF Core の全接続に search_path や statement_timeout などの PostgreSQL セッションパラメーターを設定する方法
一度だけ実行した SET は、Npgsql が接続をプールに戻した瞬間に DISCARD ALL で消去されます。Search Path と Options の接続文字列キーワードで search_path と statement_timeout をスタートアップパケットに含め、うまくいかない場合は ALTER ROLE か ConnectionOpened インターセプターにフォールバックします。また、UsePhysicalConnectionInitializer の SET が黙って失われる理由も解説します。
EF Core と Npgsql で PostgreSQL の jsonb 配列にアトミックに追加する方法
エンティティを読み込み、List.Add を呼んで保存すると、jsonb ドキュメント全体が書き換えられ、同時に行われた追加は黙って失われます。追加処理は jsonb の || 演算子を使った 1 つの UPDATE にまとめます。ExecuteSqlAsync を使うか、ExecuteUpdateAsync の中でマップした関数を使い、さらに @> によるガードで冪等にします。
EF Core で Oracle のシーケンスを使って主キーを生成する方法
Oracle.EntityFrameworkCore 10 の UseSequence で EF Core のキーを Oracle のシーケンスにマッピングします。プロバイダーが実際に出力する DDL と INSERT の SQL、既存のシーケンスやレガシーなトリガーを使う方法、引用符と HiLo でつまずきやすい理由、そして ORA-00001 を起こさずに ID 列をシーケンスへ移行する方法を解説します。