使用EF向一个表添加多个一对多关系

时间:2016-05-27 13:52:18

标签: c# mysql angularjs entity-framework

我正在尝试将另一个与多个关系添加到已创建到新表(多个)的表(一个)中。我有另一个目前正在工作,所以我试图复制它,但没有成功。 这是我的背景:

WsExtend.postFile(
      url=url,
      files = List("fileparamname" -> filepath),
      bodyParams = List("albumName" -> albumName),
      headers = Map("Cookie" -> cookie)

这是我试图添加的模型:

public class SkillResourceCenterAppContext : DbContext
{
    public SkillResourceCenterAppContext() : base("DefaultConnection")
    {
    }

    public DbSet<Persons> Persons { get; set; }

    public DbSet<Skill> Skills { get; set; }

    public DbSet<PersonSkill> PersonSkills { get; set; }

    public DbSet<PersonExperience> PersonExperience { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Persons>().HasMany(x => x.PersonSkills).WithRequired(x => x.Person).HasForeignKey(u => u.PersonNumber).WillCascadeOnDelete(false);
        //New Line for new model
        modelBuilder.Entity<Persons>().HasMany(x => x.PersonExperiences).WithRequired(x => x.Person).HasForeignKey(u => u.PersonNumber);
        modelBuilder.Entity<Skill>().HasMany(x => x.PersonSkills).WithRequired(x => x.Skill).HasForeignKey(u => u.SkillCodeID);
    }
}

这是我试图创建另一个与多个关系的表的模型:

 public class PersonExperience
 {
    public PersonExperience() { }

    [Key]
    public int ID { get; set; }

    public string ExperienceTitle { get; set; }

    public string Description { get; set; }

    public int PersonNumber { get; set; }

    public virtual Persons Person { get; set; }
}

其余的工作直到我尝试运行此新迁移并更新数据库。现在,每次代码访问PersonExperience表时,它都会抛出一个循环引用,同时序列化一个类型为&#39; System.Data.Entity.DynamicProxies错误的对象。我已经尝试将外键注释添加到模型中,但它不起作用。我尝试了WillCascadeOnDelete,似乎没有任何工作。我得到的最接近的是将ScriptIgnore注释添加到PersonExperiences模型中的虚拟人,但是Person值不会显示在角度ui网格中。目前,数据库显示PersonExperiences表具有外键作为PersonNumber。任何帮助或建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

我通过使用Select语句修复它来检索记录。在将where子句更改为选择我需要的数据后,它在我的网格中工作并显示。

Logger log("mylog.txt");
log << "a string" << " " << 1 << " " << 6.2 << "\n";
log.logd(); // <- this prints and then clears the internal stream/list.