首页 > 解决方案 > 为什么我的数据库在 ASP.NET Core 2.1 中播种后仍然是空的?

问题描述

在使用 Entity Framework 的 ASP.NET Core MVC Web 应用程序中,我将模型定义如下:

using System.Linq;
using System.Threading.Tasks;

namespace NewTechParentPortalV3.Models
{
    public class Student
    {
        public int StudentID { get; set; }
        [StringLength(50, ErrorMessage = "Last name cannot be longer than 50 
characters.")]
        public string LastName { get; set; }
        [StringLength(50, ErrorMessage = "First name cannot be longer than 
50 characters.")]
        public string FirstMidName { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", 
ApplyFormatInEditMode = true)]
        public DateTime EnrollmentDate { get; set; }
        public int ParentID { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
        public Parent Parent { get; set; }
    }

    public class Parent
    {
        public int ID { get; set; }
        [StringLength(50, ErrorMessage = "Last name cannot be longer than 50 
characters.")]
        public string LastName { get; set; }
        [StringLength(50, ErrorMessage = "First name cannot be longer than 
50 characters.")]
        public string FirstMidName { get; set; }
        public string Address { get; set; }
        public string Telephone { get; set; }
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }

        public ICollection<Student> Students { get; set; }
    }
}

然后我更新了数据库上下文,并在数据库中植入了测试数据。之后,我添加了迁移,更改了连接字符串以创建一个新的,然后更新了数据库。但是当我打开数据库时,它是空的?

注意:在将导航属性添加到两个模型之前,我能够正确地播种数据库,我的意思是在将以下代码添加到 Student 模型之前:

            public Parent Parent { get; set; }

并将以下代码添加到父模型:

    public ICollection<Student> Students { get; set; }

它表明我正确地完成了其他部分,但是当我添加上述代码行时,数据库变为空。谁能帮我找出问题所在?

标签: c#model-view-controllerentity

解决方案


有两件事要确认:

  1. 您是否定义了这些导航属性的关系,例如:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Parent>().HasMany(g => g.Students);

    base.OnModelCreating(modelBuilder);
}
  1. 播种时是否相互赋值
var parentId = 1;
var student = new Student
{
  ParentId = parentId
}
....

var parent = new Parent()
{
  ID = parentId
  Students = {student}
}


推荐阅读