自引用MVC5 EF6在数据库中创建新的Id

时间:2017-03-21 16:59:48

标签: mysql asp.net-mvc entity-framework self-reference

我正在MVC5模型中创建一个自我参照模型,这是一个经过深思熟虑。模型如下:

public class GalleryCat
    {
    [Key]
    public int GalleryCatId { get; set; }
    public string CatName {get; set;}
    public virtual GalleryCat GalleryCatParent { get; set; }
    public int GalleryCatParentId {get; set; }
    public virtual ICollection<GalleryCat> Children { get; set; }
    public virtual ICollection<Gallery> Galleries { get; set; }

    protected void OnModelCreating (DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<GalleryCat>()
           .HasOptional(c => c.GalleryCatParent)
           .WithMany(c => c.Children)
           .HasForeignKey(p => p.GalleryCatParentId);

        }
 }

这会在MYSQL数据库中创建一个新的Id字段,如GalleryCatParent_GalleryCatId而不是GalleryCatParentId?有人可以指导我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

OnModelCreatingDbContext的一种方法。您不能只将它添加到任何实体类。换句话说,您的流畅配置从未实际运行,因此您的设置未应用于数据库。

在您的上下文中覆盖OnModelCreating并在那里添加此流畅配置,或者如果您想将配置保留在实体中,您可以通过以下方式执行此操作:

public class GalleryCat
{
    ...

    public class Config : EntityTypeConfiguration<GalleryCat>
    {
        public Config()
        {
            HasOptional(c => c.GalleryCatParent)
                .WithMany(c => c.Children)
                .HasForeignKey(p => p.GalleryCatParentId);
        }
    }
}

然后,在您的上下文中覆盖OnModelCreating,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new GalleryCat.Config());
}