私は現在、リストとして一般的にモックDbSetsに拡張メソッドを使用しています:一般的にDbSet.FindメソッドをMoqでモックする方法はありますか?
public static DbSet<T> AsDbSet<T>(this List<T> sourceList) where T : class
{
var queryable = sourceList.AsQueryable();
var mockDbSet = new Mock<DbSet<T>>();
mockDbSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(queryable.Provider);
mockDbSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(queryable.Expression);
mockDbSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
mockDbSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(queryable.GetEnumerator());
mockDbSet.Setup(x => x.Add(It.IsAny<T>())).Callback<T>(sourceList.Add);
mockDbSet.Setup(x => x.Remove(It.IsAny<T>())).Returns<T>(x => { if (sourceList.Remove(x)) return x; else return null; });
return mockDbSet.Object;
}
しかし、私はテーブルの主キーに基づいて検索する検索方法を、模擬する方法を把握することはできません。私は、データベースを調べ、PKを取得し、そのフィールドのFindメソッドをモックすることができるので、各テーブルの特定のレベルでそれを行うことができます。しかし、私は一般的な方法を使用することはできません。
EFが自動的に生成した部分クラスに追加して、属性または何かを持つPKであるフィールドをマークすることもできます。しかし、100を超えるテーブルがあり、手動でこれを管理する人に頼っていると、コードを管理するのが難しくなります。
EF6はプライマリキーを見つける方法を提供しますか、それともデータベースに接続した後でのみ動的に認識しますか?
あなたは次のようなものをお探しですか?[リンク](http://stackoverflow.com/a/25199983/5048049)そうでなければ、あなたは何を探していますか? – peval27
これは私が説明した最初の選択肢です。これは、一般的なセットの汎用モックではなく、ActiveLoanセットの特定のモックを作成しています。 –