为什么我的数据库在 ASP.NET Core 2.1 中播种后仍然是空的?
Why my database is still empty after I seed it in ASP.NET Core 2.1?
在使用 Entity Framework 的 ASP.NET 核心 MVC 网络应用程序中,我按如下方式定义模型:
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; }
说明我其他部分都做对了,但是当我加上上面几行代码的时候,数据库就变空了。谁能帮我找出问题所在?
有两件事要确认:
- 您是否为这些导航属性定义了关系,例如:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>().HasMany(g => g.Students);
base.OnModelCreating(modelBuilder);
}
- 做种的时候有没有给对方赋值
var parentId = 1;
var student = new Student
{
ParentId = parentId
}
....
var parent = new Parent()
{
ID = parentId
Students = {student}
}
在使用 Entity Framework 的 ASP.NET 核心 MVC 网络应用程序中,我按如下方式定义模型:
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; }
说明我其他部分都做对了,但是当我加上上面几行代码的时候,数据库就变空了。谁能帮我找出问题所在?
有两件事要确认:
- 您是否为这些导航属性定义了关系,例如:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>().HasMany(g => g.Students);
base.OnModelCreating(modelBuilder);
}
- 做种的时候有没有给对方赋值
var parentId = 1;
var student = new Student
{
ParentId = parentId
}
....
var parent = new Parent()
{
ID = parentId
Students = {student}
}