我正在尝试将另一个一对多关系添加到已创建的表(一个)到新表(多个)。我还有另一个正在运行,所以我尝试复制它,但没有成功。 这是我的背景:
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; }
}
这是我试图创建另一个一对多关系的表的模型:
public class Persons
{
public Persons() { }
[Key]
public int PersonNumber { get; set; }
public string IdName { get; set; }
[MaxLength(50)]
public string PersonPosition { get; set; }
[MaxLength(250)]
public string PersonName { get; set; }
public bool Active { get; set; }
public virtual ICollection<PersonSkill> PersonSkills { get; set; }
public virtual ICollection<PersonExperience> PersonExperiences { get; set; }
}
其余部分一直在工作,直到我尝试运行这个新的迁移并更新数据库。现在,每次代码访问 PersonExperience 表时,它都会抛出“序列化“System.Data.Entity.DynamicProxies”类型的对象时检测到循环引用错误。我尝试将外键注释添加到模型中,但它不起作用。我尝试过 WillCascadeOnDelete 但似乎没有任何效果。我得到的最接近的结果是将 ScriptIgnore 注释添加到 PersonExperiences 模型中的虚拟人物,但随后 Person 值没有显示在 Angular ui 网格中。目前数据库显示 PersonExperiences 表的外键为 PersonNumber。如有任何帮助或建议,我们将不胜感激。
最佳答案
我通过使用 Select 语句检索记录来修复此问题。将 where 子句更改为选择我需要的数据后,它可以工作并显示在我的网格中。
result = db.Persons.Where(x => x.Active && x.PersonNumber.ToString() == userStringQuery.Id)
.Select(c => new { ID = c.PersonNumber, Value = c.FullName }).OrderBy(c => c.Value);
关于c# - 使用 EF 将多个一对多关系添加到一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37485256/