实体框架 - 代码优先 - 关系

时间:2015-03-25 13:51:04

标签: asp.net-mvc entity-framework

我是第一个使用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");            
        }
}

2 个答案:

答案 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>属性要求立即执行查询。