2

ItemsCategoryおよびジャンクション テーブルの3 つのテーブルがありますCategoryItems。アイテムとカテゴリは多対多の関係にあります。

CategoryItems にはCategory_IdItem_Idおよび の 3 つの列がありPositionます。

PositionEntity Framework でアイテムを並べ替えるにはどうすればよいですか?

私はこのモデルビルダーを使用しています:

modelBuilder
.Entity<Category>()
.HasMany(c => c.Items)
.WithMany();
4

2 に答える 2

4

CategoryItems結合テーブル ( ) に、リレーションシップの両端 (この場合は ) の外部キーに対する追加の列がある場合、EF は多対多リレーションシップのマッピングをサポートしませんPosition。別のタイプ (例: CategoryItem) を作成し、マッピングをこのタイプへの 2 つの 1 対多の関係として構成する必要があります。

この場合、あなたのCategoryandItem型の両方に (たとえば)CategoryItemコレクションがあり、CategoryItem型にはCategoryandItemプロパティがあります。

したがって、位置順に並べられたカテゴリのアイテムのリストを取得するには、次のようにします。

var category = context.Categories.Find(categoryId);
var orderedItems = 
    category.CategoryItems.OrderBy(ci => ci.Position).Select(ci => ci.Item);

CategoryItemこれは純粋に多対多の関係をモデル化するためにジャンクション テーブルを説明するのに適した名前ですが、この場合は実際にはそれ自体がエンティティであるため、より適切な名前を選択することをお勧めします。

于 2012-08-26T14:59:07.350 に答える
1

カテゴリアイテムのロードにこれを使用することになりました:

 public IEnumerable<Item> Items
    {
        get
        {
            using (var context = new CatalogueContext())
            {
                var ids = context.Database.SqlQuery<int>("SELECT Item_Id FROM CategoryItems WHERE Category_Id = " +
                                                         this.Id + " ORDER BY Position");
                foreach (int id in ids)
                    yield return context.Items.Find(id);

            }
        }
    } 

次に、SQL クエリを使用して位置を変更します。

于 2012-08-26T15:52:46.950 に答える