我有一个导航菜单提供程序,我正在尝试使用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,但是每次尝试都被破坏或完成与它完全相同的事情而没有触及OnModelCreating。我敢肯定我只是“做错了。”
谢谢!
答案 0 :(得分:3)
您需要为MenuItem
实体设置多对多自引用关联,以便每个MenuItem可以有多个父项:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MenuItem>()
.HasMany(m => m.SubMenuItems)
.WithMany();
}