我是第一个使用EF6代码优先的新手,现在我不知道如何在我的地图中创建正确的关系。
基本上我有这个实体
Menu
MenuGrupo
Menu 1 x N MenuGrupo
Somenthing,如Menu 1 X n MenuItens
这些是我的课程:
public class Menu
{
public Menu()
{
ListaFilhos = new List<Menu>();
}
public Int32 MenuID { get; set; }
public String Nome { get; set; }
public String Action { get; set; }
public String Controller { get; set; }
public String Url { get; set; }
public Int32? Pai { get; set; }
public Boolean? Ativo { get; set; }
public virtual List<Menu> ListaFilhos { get; set; }
}
public class MenuMap : EntityTypeConfiguration<Entidade.Menu>
{
public MenuMap()
{
HasKey(x => x.MenuID);
Property(x => x.MenuID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(x => x.Pai).IsRequired();
Property(x => x.Nome).HasColumnType("varchar").HasMaxLength(100).IsRequired();
Property(x => x.Url).HasColumnType("varchar").HasMaxLength(250);
Property(x => x.Action).HasColumnType("varchar").HasMaxLength(50);
Property(x => x.Controller).HasColumnType("varchar").HasMaxLength(50);
Property(x => x.Ativo).IsRequired();
ToTable("Menu");
}
}
public class MenuGrupo
{
public MenuGrupo()
{
ListaMenu = new List<Menu>();
}
public Int32 MenuGrupoID { get; set; }
public Int32 MenuID { get; set; }
public virtual List<Menu> ListaMenu { get; set; }
}
public class MenuGrupoMap : EntityTypeConfiguration<Entidade.MenuGrupo>
{
public MenuGrupoMap()
{
HasKey(x => x.MenuGrupoID);
Property(x => x.MenuGrupoID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(x => x.MenuID).IsRequired();
ToTable("MenuGrupo");
}
}
答案 0 :(得分:0)
请查看Getting Started with Entity Framework 6 Code First using MVC 5。它非常有用,让您正确构建项目。
关于您的情况,至少在启动时使用DataAnnotations而不是Fluent API就足够了。
Hoıpe这有助于......
答案 1 :(得分:0)
您正在使用List<Menu>
,而您应该使用ICollection<Menu>
。这是必要的原因是相当低级,但足以说,它与实体框架如何处理关系和延迟加载之类的事情有关。 List<T>
属性要求立即执行查询。