3

MenuItem オブジェクトを使用して EF Code First (EF4、CPT5) に移行しようとしているナビゲーション メニュー プロバイダーがあります。これは、何よりも EF Code First とのさまざまな関係を構築することに慣れるための演習です。

私の MenuItem には、MenuItems のコレクションである SubMenuItems というフィールドがあります。クラスを変更せずに EF Code First を使用すると、MenuItems 用に作成されたテーブルに親メニュー項目の列が追加されます。メニューは正しく表示されますが、これにより、メニュー項目を複数のサブメニューに表示する機能が削除されます。各 MenuItem をスタンドアロン項目にして、メニュー項目の SubMenuItems を他の MenuItems にリンクする別のテーブルを作成することを EF Code First に伝える適切な方法は何ですか?

public class MenuItem
{
    public int ID { get; set; }
    public virtual SubMenuItems { get; set; }
    public string Text { get; set; }
    public string Controller { get; set; }
    public string Action { get; set; }
    public bool IsRoot { get; set; }
    public bool RequiresAuthentication { get; set; }
    public virtual ICollection<MenuPermission> RequiredPermissions { get; set; }
    public bool HiddenIfAuthenticated { get; set; }
    public int DisplayOrder { get; set; }
}

...

public class MyDbContext : DbContext
{
    public DbSet<MenuItems> MenuItems { get; set; }
    public DbSet<MenuItemPermission> MenuItemPermissions { get; set; }
    ...
}

私は OnModelCreating をオーバーライドしようとしましたが、それぞれの試行は、壊れているか、OnModelCreating に触れずに行うのとまったく同じことを行うことで終わりました。ただ「やり方が悪い」だけだと思います。

ありがとう!

4

1 に答える 1

3

MenuItem各MenuItemが複数の親アイテムを持つことができるように、エンティティの多対多自己参照アソシエーションを設定する必要があります。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<MenuItem>()
                .HasMany(m => m.SubMenuItems)
                .WithMany();

}
于 2011-02-19T22:23:23.620 に答える