1

継承したレガシー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()
 );

既存のデータベース構造を消去せずに、テーブルとマッピングを最も効率的な方法でリンクするにはどうすればよいですか?

4

1 に答える 1

0

EF は一意のキーをサポートしておらず、SchemaDefinitionCode有効な多対多の関係を形成するには一意である必要があるため、この方法では機能しませんCategorySchemaDefinitionCodeがテーブル内で一意でない場合、DefinitionSchemaとの関係でプリンシパル エンドとして使用できませんCatagoryMapping。一意の場合SchemaDefinitionIDは、同じコード値を持つ ID が 1 つ以上ないため、代わりに使用できます。

于 2011-04-07T18:34:19.100 に答える