2016-07-20 21 views
4

Visual StudioとC#でEffortを使用してデータベースを再作成し、ユニットテストしています。私は単一のテーブルのためのクラスを書いているので、私はそのテーブルのオブジェクトでデータベースにデータを取り込みます。私の問題は、Effortデータベースが、オブジェクトの外部キーがデータベース内の実際のオブジェクトを参照することを望んでいることです。作業中に外部キー参照を無効にする

私のエラーが

System.Data.Entity.Infrastructure.DbUpdateExceptionです:エントリを更新中にエラーが発生しました。詳細については、内部例外を参照してください。

System.Data.Entity.Core.UpdateException:エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。

System.Reflection.TargetInvocationException:例外が呼び出しのターゲットによってスローされました。

NMemory.Exceptions.ForeignKeyViolationException:外部キー違反[Table1 :: SettingsId]。参照テーブル[Table2 :: SettingsId]にキー値[0]が存在しません。エラーコード:RelationError

この特定のテーブルには、多くの他の外部キーを持つオブジェクトに対する多くの外部キーがあるため多くの作業。これをオフにしてこのテーブルだけをテストできるように努力する方法はありますか?

答えて

1

この問題も発生し、大きなデータベースの範囲でテーブルをテストしたかったのです。必要なものすべてをインスタンス化し、その結果としてデータベースまたはテーブルを参照渡しするヘルパーメソッドを作成できます。それはあなたが必要とするテストメソッド/クラスからいつでも呼び出すことができるので役に立ちます。

0

この表は単独ではありません。テーブルのみを使用する場合は、新しいテーブルを設計し、.sqlスクリプトを使用して制約と参照を削除します。 Entity Frameworkを使用する場合、インサートをモックするのは比較的簡単ですが、かなり激しくなる可能性があります。

0

テスト専用にデータベースから新しい.edmxファイルを作成することができます。例:

Visual Studioでは、ファイル - >新規 - >データ - >エンティティデータモデルを選択します。 「データベースからEF Designer」を選択します。 既存のSQL Serverデータベースへの接続を選択または作成し、app.configの接続設定を "testConnectionString"として保存します。

データモデルデザイナーでは、不要な外部キー関係を削除します。 デザイナを保存してプロジェクトを再構築します。

努力の中で、このように、CreateTransient方法に接続文字列の名前を(あなたが新しい.edmxを作成したときには、生成された)パス:これはあなたがに値を挿入できるようにする必要があり

EntityConnection connection = Effort.EntityConnectionFactory.CreateTransient("name=testConnectionString"); 

MyDbContext context = new MyDbContext(connection); 

関連する外部キーテーブルにデータを格納する必要はありません。

これは警告ですが、テストしているコードが外部キーに依存するナビゲーションプロパティを使用している場合、警告は表示されません。これは、このような「単体テスト」がいかに貴重なのか不思議に思います。

関連する問題