Entity Framework 两个具有相同对象的表

Entity Framework two tables with identical objects

我有两个具有相同属性的表,例如:

DbSet<Person> Students;
DbSet<Person> Teachers;

但是 Entity Framework 不允许相同的 class 用于不同的表。

所以,我改用:

DbSet<Student> Students;
DbSet<Teacher> Teachers;

public class Student : Person { }
public class Teacher : Person { }

但是,如果我从第三方获取大量数据,如

List<Person> data;

我做不到

Students.Add(data) <== compile time error unable to convert

也不

foreach (var item in data)
    Students.Add((Student)item); <== runtime error unable to cast

有什么好的处理方法的建议吗?

注意:这是一个简单的例子,它实际上用于大量的股票价格柱,性能是一个大问题,如果我能提供帮助,我不一定想要实例化一个对象的很多很多副本它。

我们需要有关如何为完全有效的答案创建 List<Person> 的更多详细信息,但如果您通过添加 StudentTeacher 对象来创建它,那么您应该能够在运行时转换实际上 Student 的那些:

List<Person> people = new List<Person>();
people.Add(new Student());
people.Add(new Teacher());
foreach(Student student in people.OfType<Student>())
{
    Students.Add(student);
}

我也会制作 Person abstract 所以你被迫使用其中一种具体类型。