質問: DBに直接アクセスするいくつかの統合テストがあります - テストの前提条件オブジェクトを作成する - テストを実行した後、後でクリーンアップする - しかし、私はメモリ内で同じアプローチを試してみることにしました。 私は自分のプロジェクトで*Effort*を使っています。とても簡単に動作します。しかし、私は試していた問題を打ちましたが、解決することはできませんでした。 テストの前提条件として、ダミーデータでいっぱいにする必要があるテーブルの1つに、計算列(nvarchar、nullではない)が含まれています。テストの範囲については、実際にはその列の値は気にしませんが、ダミーデータを挿入しようとしてもデータは無視され、エラーが発生します。 ``` "Column 'x' cannot be null. Error code: GenericError" ``` 私のテストでは、実際のコードで使用されているのと同じedmxファイルを使用しています。これは私がedmxのコピーを絶えず更新することを妨げます。 列がNULL可能な非計算列であるように、実行時にedmxを更新するようにテストを強制する方法がありますか? [OnModelCreatingをオーバーライドする]、またはこのエラーを停止するためにデフォルト値を挿入する方法がありますか? [SaveChangesをオーバーライドする] 私は現在、以下を試しています: * .Add()の代わりに.Attach()を使用してオブジェクトをアタッチする * 追加後にEntityStateを変更しないで設定する * Entry.OriginalValuesを介して値を強制する[このエンティティは追加状態です] **編集:** 私は*OnModelCreating*メソッドをオーバーライドしようとしましたが、これはDB-Firstであるため無駄です。 ``` modelBuilder.Entity().Property(p => p.x).IsOptional().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None); ```
回答: 問題の理由は、Effortデータベースのバグでした。計算列がNULL不可列に基づいている場合、計算列も自動的にNULL不可になります。そのため、Effortデータベースはnull以外の値を予期していました。最新のアップデートにより、問題は解決されました。グローバル`EntityFrameworkEffortManager.UseDefaultForNotNullable`フラグをtrueに設定する必要があります。 githubで問題を見る