在开始设计一些Entity Framework应用程序之前,我只观看了一些网络广播。我确实没有读那么多文档,所以我现在为此感到痛苦。
我List<T>在课堂上一直在使用,效果很好。
List<T>
现在,我已经阅读了一些文档,并指出我应该一直在使用ICollection<T>。我改成了这个,它甚至没有引起模型上下文的改变。这是因为List<T>和ICollection<T>都继承了IEnumerable<T>,而这正是EF实际需要的吗?
ICollection<T>
IEnumerable<T>
但是,如果是这样的话,为什么不EF文档状态,它需要IEnumerable<T>的不是ICollection<T>?
无论如何,我做过的事情有什么弊端,还是我应该改变它?
ICollection<T>之所以会使用实体框架,是因为它需要支持Add不是IEnumerable<T>接口一部分的操作。
Add
另请注意,您 在 使用ICollection<T>,只是将其作为List<T>实现公开。List<T>随之带来的IList<T>,ICollection<T>和IEnumerable<T>。
IList<T>
至于您所做的更改,尽管可行,但通过界面进行公开是一个不错的选择List<T>。该接口定义合同,但不定义实现。实现 可能会 改变。例如,在某些情况下,实现可能是HashSet<T>。(顺便说一下,(这是一种思维方式,您不仅可以将其用于实体框架)。一种好的面向对象的实践是针对接口而不是实现进行编程。实现可能并且将会改变。)
HashSet<T>