Entity Framework Code First - 单个类的多对多关系

3
我有一个导航菜单提供者,我正在尝试使用一个MenuItem对象将其移植到EF Code First (EF4,CPT5)。这更多是为了熟悉使用EF Code First构建不同关系的练习,我的MenuItem有一个名为SubMenuItems的字段,它是MenuItems的集合。当我在EF Code First中使用(未修改类)时,为MenuItems创建的表会添加一个父菜单项列。菜单将正确显示,但这将删除任何允许菜单项出现在多个子菜单中的能力。告诉EF Code First我想要每个MenuItem都是独立的项目并创建另一个表来链接菜单项的SubMenuItems到其他MenuItems的正确方法是什么?
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方法,但每次尝试都会导致出现错误或者什么也不改变。我相信我只是“做错了什么”。

谢谢!

1个回答

3
你需要为MenuItem实体设置一个多对多的自引用关联,以便每个菜单项可以有多个父级项:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<MenuItem>()
                .HasMany(m => m.SubMenuItems)
                .WithMany();

}

我以为我已经做过了,但我想我弄错了什么。非常感谢,那个完美解决了! - Jim D'Angelo
如果您的连接表具有不同的列/表名称--https://dev59.com/A2ct5IYBdhLWcg3wPbIm#12331031 - drzaus
该方法应添加到继承自 DbContext 的类中。在 EF6 中,参数的类型应为 DbModelBuilder - Peppe L-G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接