自引用 MVC5 EF6 在数据库中创建一个新的 Id
Self Referencing MVC5 EF6 creating a new Id in database
我正在 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?有人可以指导我做错了什么吗?
OnModelCreating
是DbContext
的一个方法。您不能只将它添加到任何实体 class。换句话说,您的流畅配置实际上从未 运行,因此您的设置未应用于数据库。
在您的上下文中覆盖 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());
}
我正在 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?有人可以指导我做错了什么吗?
OnModelCreating
是DbContext
的一个方法。您不能只将它添加到任何实体 class。换句话说,您的流畅配置实际上从未 运行,因此您的设置未应用于数据库。
在您的上下文中覆盖 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());
}