【问题标题】:How to populate a database through seed method using foreign keys and creating a relationship between tables in .NET C# EF?如何使用外键通过种子方法填充数据库并在 .NET C# EF 中创建表之间的关系?
【发布时间】:2015-09-17 18:35:19
【问题描述】:

我的种子方法包含如下:

        var professors = new List<Professor>
        {
            new Professor
            {
                Name = "Arturo Anand",
                EnrollmentDate = DateTime.Parse("09-08-2015")
            }
        };

        professors.ForEach(prof => context.Professors.AddOrUpdate(prof));
        context.SaveChanges();

        var presentations = new List<Presentation>
        {
            new Presentation
            {
                PresentationTitle = "Test",
                PresentationTime = DateTime.Parse("09-09-2015"),
                Level = Level.Advanced,
            }
        };

        presentations.ForEach(pres => context.Presentations.AddOrUpdate(pres));
        context.SaveChanges();

这是两个类之间的关系: 演示类:

    public class Presentation
{
    public int PresentationId { get; set; }
    public string PresentationTitle { get; set; }
    public DateTime PresentationTime { get; set; }
    public Level? Level { get; set; }
    public virtual Professor Professor { get; set; }
}

教授班:

  public class Professor
{
    public int ProfessorId { get; set; }
    public string Name { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public virtual ICollection<Presentation> Presentations { get; set; }
}

我真的不知道我应该如何从种子方法填充数据库,以便将数据绑定到两个表中的表单,从而在它们上创建 CRUD 操作。

编辑: 教授模型:

    public class Professor
{
    public int ProfessorId { get; set; }
    public string Name { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public virtual ICollection<Presentation> Presentations { get; set; }
}

【问题讨论】:

  • 您遇到错误了吗?
  • 什么是等级?该代码是否编译我正在尝试运行您的代码而不是 foreach 和保存,我得到错误..还有为什么您很难绑定您在教授和演示类的 List 中获得的数据。 .?
  • Level 只是一个枚举,我担心的是,如果我在表格中填充数据,则演示文稿表将不会绑定任何教授 ID。
  • 对不起,如果这是一个愚蠢的问题..我是新手,我没有发现任何关于通过基于外键的种子方法填充表的信息。

标签: c# entity-framework data-binding


【解决方案1】:

由于ProfessorsPresentation 之间存在关系,您可以将演示文稿直接分配给教授对象,EF 将为您填充 FK。试试这个

protected override void Seed(yourDbContext context)
{

       var professors = new List<Professor>
       {
         new Professor
         {
            Id = 1,
            Name = "Arturo Anand",
            EnrollmentDate = DateTime.Parse("09-08-2015"),
            Presentations = new List<Presentation>
              {
                 new Presentation
                 {
                 PresentationTitle = "Test",
                 PresentationTime = DateTime.Parse("09-09-2015"),
                 Level = Level.Advanced,
                 }
              }
         }
     };
  //make sure to specify a key for the AddOrUpdate Method to ensure 
  //that you don’t create duplicates when you seed data during development.
   professors.ForEach(prof => context.Professors.AddOrUpdate(x => x.Id, prof));
}

您也无需致电SaveChanges。运行命令Update-Database将执行种子方法。

【讨论】:

  • 它抱怨我的教授模型不包含演示文稿。
  • 它应该是 Presentations 因为是您的财产的名称,检查我的答案我编辑了该行。
  • 嗨@user3399858,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
  • 不完全是..目前只有教授表充满了数据,我正在尝试解决这个问题,之后我会在这里发布答案并接受你的答案。您发布的代码似乎很好,我想问题出在我这边。
  • 再次重建和更新数据库后,数据库中填充了数据。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2021-03-01
  • 2013-03-01
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多