c# - 为什么我的数据库在 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; }
它表明我正确地完成了其他部分,但是当我添加上述代码行时,数据库变为空。谁能帮我找出问题所在?
解决方案
有两件事要确认:
- 您是否定义了这些导航属性的关系,例如:
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}
}
推荐阅读
- search - Perforce 中的可搜索关键字?
- c - 如何让 getopt 在处理参数之前跳过程序名称和脚本名称?
- sql - 如何仅过滤许多相交范围之一
- excel - 在工作簿文件夹中搜索大于值
- android-studio - 使用 AsyncTask 获取值
- android-studio - 如何像原始谷歌地图标记一样在地图标记下设置文本
- javascript - 如何在 Typescript Mocha 测试中解决 Class is not a constructor 错误?
- android - Android多个垂直seekBars
- r - 计算 DataFrame Columns 中向量中值的出现次数
- delphi - 运行应用程序并获取其窗口的句柄。我的代码在 Windows 10 x64 中无法正常工作