c# - 使用 EF 将多个一对多关系添加到一张表

标签 c# mysql angularjs entity-framework

我正在尝试将另一个一对多关系添加到已创建的表(一个)到新表(多个)。我还有另一个正在运行,所以我尝试复制它,但没有成功。 这是我的背景:

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/

相关文章:

C# WinForm 按下 Tab 键,它到处跳转

时间:2019-05-08 标签:c#xmlserializationextrarootnode

php - 保存具有不可空关系的模型

javascript - 如何使用过滤器对 ng-repeat 数组中的对象进行分组?

javascript - 改变输入复选框的状态 AngularJS

javascript - AngularJs - 在等待新 token 时不会跳过请求

c# - 使用 FileStream 和这些选项 c# 读取文本文件的实际内容

c# - 在类主体之外但在 namespace 内的枚举定义

mysql - MySQL 脚本,用户名和密码作为参数输入

mysql - 改进 Mysql 匹配搜索