【发布时间】:2019-08-22 17:30:46
【问题描述】:
我有两个具有相同属性的表,例如:
DbSet<Person> Students;
DbSet<Person> Teachers;
但是,Entity Framework 不允许将同一个类用于不同的表。
所以,我改用:
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
对处理这个问题的好方法有什么建议吗?
注意:这是一个简单的示例,它实际上用于大量股票价格柱,性能是一个大问题,如果我能提供帮助,我不一定要实例化一个对象的很多很多副本。
【问题讨论】:
-
是的,我并不惊讶这不起作用。即使具有相同的属性,它也不知道可以将 Person 转换为 Student。一种想法是将 Person 序列化为 json 字符串,然后将其反序列化为 Student。这需要两行代码,而且应该很快,
-
您可以创建一个新接口
IPerson,并让Student、Teacher和Person都实现IPerson。然后将您的收藏更改为List<IPerson>。 -
另外,您不能使用
Add方法将一个集合添加到另一个集合。Add需要一个元素。你想要的是AddRange方法。 -
你可以使用
ReinterpretCastfrom this answer,但这是一种类型安全违规。
标签: c# entity-framework downcast