これを行うにはモデルが必要ですが、データベースは必要ありません。モデルは EDMX として作成できますが、おそらく Code First を使用する方が簡単です。Code First モデルの作成または使用にデータベース接続が不要であることを確認するには、Code First が通常データベースから取得する情報を提供する必要があります。この投稿http://blog.oneunicorn.com/2012/04/21/code-first-building-blocks/は、DbModelBuilder を使用してこれを行う方法と、モデルから DbContext を作成する方法を示しています。次のようなコードになります。
var modelBuilder = new DbModelBuilder();
modelBuilder.Entity<Foo>();
var model = modelBuilder.Build(
new DbProviderInfo("System.Data.SqlClient", "2008")).Compile();
おそらく、異なるテストごとにモデル オブジェクトを再作成するのではなく、モデル オブジェクトをキャッシュすることをお勧めします。
また、DbContext がデータベースに接続しようとするのを防ぐために、データベース初期化子を無効にする必要があります。たとえば、コンテキストを使用する前に、次のように呼び出します。
Database.SetInitializer<FooContext>(null);
これで、任意のクエリで ToString を使用して、生成される SQL を確認できます。LINQ が式を処理できない場合は、例外が発生します。たとえば、これはクエリを出力します。
using (var context = new FooContext(model))
{
Expression<Func<Foo, bool>> predicate = x => x.Name == "Foo";
Console.WriteLine(context.Foos.Where(predicate));
}
これはスローします:
using (var context = new FooContext(model))
{
var someOtherFoo = new Foo();
Expression<Func<Foo, bool>> predicate = x => x == someOtherFoo;
Console.WriteLine(context.Foos.Where(predicate));
}
明らかに、テストを作成している場合は、コンソールに出力するだけでなく、何らかのアサーション/チェックを実行します。