我有两个相关的类,如下所示:
public class Student
{
public long Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public long FavoriteCourseId { get; set; }
}
public class Course
{
public long Id { get; set; }
public string Name { get; set; }
}
两者之间存在一对一的关系。Student
有一个外键,它Course
通过引用了FavoriteCourseId
。
我的流利映射如下:
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<Student>(entity => {
entity.ToTable("Student").HasKey(k => k.Id);
entity.Property(p => p.Id).HasColumnName("StudentID");
entity.Property(p => p.Name).IsRequired();
entity.Property(p => p.Email).IsRequired();
entity.Property(p => p.FavoriteCourseId).IsRequired();
});
modelBuilder.Entity<Course>(entity => {
entity.ToTable("Course").HasKey(k => k.Id);
entity.Property(p => p.Id).HasColumnName("CourseID");
entity.Property(p => p.Name).IsRequired();
});
modelBuilder.Entity<Student>()
.HasOne(typeof(Course))
.WithOne()
.HasForeignKey("Student", "FavoriteCourseId")
.HasConstraintName("FK_Student_Course");
modelBuilder.Entity<Course>().HasData(
new Course { Id = 1, Name = "Calculus" },
new Course { Id = 2, Name = "Chemistry" },
new Course { Id = 3, Name = "Literature" },
new Course { Id = 4, Name = "Trigonometry" },
new Course { Id = 5, Name = "Microeconomics" });
modelBuilder.Entity<Student>().HasData(
new Student { Id = 1, Name = "Alice", Email = "[email protected]", FavoriteCourseId = 2 },
new Student { Id = 2, Name = "Bob", Email = "[email protected]", FavoriteCourseId = 2 });
}
在这里,我正在播种两个学生-爱丽丝和鲍勃。但是,当我创建初始化迁移时,该迁移仅播种Bob并忽略Alice。
migrationBuilder.InsertData(
table: "Student",
columns: new[] { "StudentID", "Email", "FavoriteCourseId", "Name" },
values: new object[] { 2L, "[email protected]", 2L, "Bob" });
为什么会忽略Alice的数据行?我还注意到,只有当FavoriteCourseId
Alice和Bob相同时,数据行才会被忽略。如果我将FavoriteCourseId
两行的值更改为不同的值,则将插入Alice。
它只能播种一名学生,因为根据您的模型,同一课程只能容纳一名学生。将模型更改为此:
public class Student
{
[Key]
public long Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public long FavoriteCourseId { get; set; }
[ForeignKey(nameof(FavoriteCourseId ))]
[InverseProperty("FavoriteCourses")]
public virtual Course FavoriteCourse { get; set; }
}
public class Course
{
[Key]
public long Id { get; set; }
public string Name { get; set; }
[InverseProperty(nameof(Student.FavoriteCourse))]
public virtual ICollection<Student> Students{ get; set; }
}
和dbcontext:
modelBuilder.Entity<Student>(entity =>
{
entity.HasOne(d => d.FavoriteCourse)
.WithMany(p => p.Courses)
.HasForeignKey(d => d.FavoriteCourseId)
.OnDelete(DeleteBehavior.ClientSetNull);
}
modelBuilder.Entity<Course>().HasData(
new Course { Id = 1, Name = "Calculus" },
new Course { Id = 2, Name = "Chemistry" },
new Course { Id = 3, Name = "Literature" },
new Course { Id = 4, Name = "Trigonometry" },
new Course { Id = 5, Name = "Microeconomics" });
modelBuilder.Entity<Student>().HasData(
new Student { Id = 1, Name = "Alice", Email = "[email protected]", FavoriteCourseId = 2 },
new Student { Id = 2, Name = "Bob", Email = "[email protected]", FavoriteCourseId = 2 });
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句