Asp.Net MVC Codefirst模型与同一模型的关系

时间:2014-02-17 12:41:35

标签: asp.net-mvc ef-code-first

我有一个模型,我想放一个可以从同一个模型填充的额外字段。 IE:类别和子类别。

在我的示例中,访问者可以添加文件类型,但如果文件类型在另一种文件类型下,他可以选择, 但是我无法解决这个问题。下面你可以看到我的模型。

 public class HrFileType
    {
        [Key]
        public int Id { get; set; }
        [Display(Name = "Dosya Adı")]
        public int Name { get; set; }

        public int? HrFileTypeId { get; set; }
        public virtual HrFileType HrFileType2 { get; set; }
    }

2 个答案:

答案 0 :(得分:1)

您只需添加ForeignKeyAttribute,如下所示:

public class HrFileType
{
    [Key]
    public int Id { get; set; }
    [Display(Name = "Dosya Adı")]
    public int Name { get; set; }

    public int? HrFileTypeId { get; set; }

    [ForeignKey("HrFileTypeId")]
    public virtual HrFileType HrFileType2 { get; set; }
}

您还可以使用流畅的API来实现此目的:

public class HrFileType
{
    [Key]
    public int Id { get; set; }
    [Display(Name = "Dosya Adı")]
    public int Name { get; set; }

    public int? HrFileTypeId { get; set; }
    public virtual HrFileType HrFileType2 { get; set; }
}

public class YourDbContext : DbContext
{
    public DbSet<HrFileType> HrFileTypes { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //
        modelBuilder.Entity<HrFileType>()
                    .HasOptional(c => c.HrFileType2)
                    .WithMany()
                    .HasForeignKey(c => c.HrFileTypeId);
    }
}

答案 1 :(得分:0)

您是否尝试过列出其他文件类型?

 public class HrFileType
    {
        [Key]
        public int Id { get; set; }
        [Display(Name = "Dosya Adı")]
        public int Name { get; set; }

        public List<HrFileType> RelatedTypes { get; set; }
    }

然后在DbContext中使用Entity Frameworks流畅的API,尝试显式声明多对多的地图。

modelbuilder.Entity<HrFileType>().HasMany(x => x.RelatedTypes).WithMany();

我很想知道这是否有效。如果没有某种父类,这是我能想到的唯一合理的解决方案。