[英]How to map same entity to different databases and ignoring a column only for one DB in Entity Framework Core?
[英]Entity Framework Core: how to map different object instances to the same entity?
如何使用 Entity Framework Core 将实体的不同对象实例映射到同一行到数据表中?
换句话说,Entity Framework Core 如何比较尚未插入数据库的实体(否则我猜它只需要比较主键)并确定两个对象应该映射到单个实体? 它是否比较实例引用? 或者调用默认的 Equality 运算符?
总结我的问题,让我们假设我有一所包含学生和老师的学校,并且我希望为每个老师姓名创建一个数据行,但我不能重用同一个老师实例,我怎么能告诉 EF 这样做呢?
public class Student
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public Teacher Teacher { get; set; }
}
public class Teacher
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Teacher> Teachers { get; set; }
public DbSet<Student> Students { get; set; }
}
public class SchoolGenerator
{
public static void CreateASchool(SchoolContext context)
{
List<Student> students = new List<Student>()
{
new Student(){Name = "Student 1", Teacher = new Teacher(){Name = "Teacher 1"}},
new Student(){Name = "Student 2", Teacher = new Teacher(){Name = "Teacher 1"}}, // I cannot re-use the previous instance of Teacher 1 for this student
new Student(){Name = "Student 3", Teacher = new Teacher(){Name = "Teacher 2"}},
new Student(){Name = "Student 4", Teacher = new Teacher(){Name = "Teacher 2"}},
};
context.Students.AddRange(students);
context.SaveChanges(); // I want to create only TWO teacher rows, one by name, and FOUR student rows
}
}
简单的:
var teacher1 = ...;
var teacher2 = ...;
List<Student> students = new List<Student>()
{
new Student(){Name = "Student 1", Teacher = teacher1 },
new Student(){Name = "Student 2", Teacher = teacher1 },
new Student(){Name = "Student 3", Teacher = teacher2 },
new Student(){Name = "Student 4", Teacher = teacher2 },
};
context.Students.AddRange(teacher1, teacher2);
context.Students.AddRange(students);
context.SaveChanges();
这假设教师是在别处创建的,并与学生保存在同一工作单元中。
为什么要手动编码 DbContext? 请改用 Scaffold-DbContext。
1) 通过在 SQL Server 中添加新的“TeacherID”列来重新设计您的 Student 表
2)在SQL Server中创建Student表和Teacher表的关系
3) 运行 Scaffold-DbContext 来更新 DbContext 和实体
4)使用下面的代码
var teacher1 = new Teacher(){ Name = "Teacher 1" };
var teacher2 = new Teacher(){ Name = "Teacher 2" };
context.Teachers.AddRange(teacher1, teacher2);
List<Student> students = new List<Student>()
{
new Student(){Name = "Student 1", TeacherID = teacher1.ID },
new Student(){Name = "Student 2", TeacherID = teacher1.ID },
new Student(){Name = "Student 3", TeacherID = teacher2.ID },
new Student(){Name = "Student 4", TeacherID = teacher2.ID }
};
context.Students.AddRange(students);
context.SaveChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.