継承したレガシーMSSQLデータベースを使用して、EntityFramework4.0を使用して汎用リポジトリを構築しようとしています。かなりおなじみのシナリオ。
既存のアイテムのかなり長いリストにカテゴリ情報を追加する必要があります。
アイテムは同時に複数のカテゴリに属することができるので、CategoryMappingというマッピングテーブルを作成しました
残念ながら、SchemaDefinitionCodeは一意ではなく、データベースで外部キー(FK)にすることはできません。
独自の部分クラスをDefinitionSchemaエンティティに追加しようとしましたが、インデックスが作成されていないため、パフォーマンスが大幅に低下します。テスト用のデモコード。これをロードするたびに新しいコンテキストを作成したくありません。
public partial class DefinitionSchema
{
private MyEntities context;
public IQueryable<Category> Categories
{
get
{
context = new MyEntities();
var categories = context.Categories
.Where(c => c.CategoryMappings
.Where(m => m.SchemaDefinitionCode == this.SchemaDefinitionCode).Any());
return categories;
}
}
}
次に、次のようなアイテムのリストを呼び出すことができます。
var q = context.SchemaDefinitions
.Where(s => s.Categories
.Where(c => c.Name == category)
.Any()
);
既存のデータベース構造を消去せずに、テーブルとマッピングを最も効率的な方法でリンクするにはどうすればよいですか?