一尘不染

ICollection VS清单 在实体框架中

c#

在开始设计一些Entity Framework应用程序之前,我只观看了一些网络广播。我确实没有读那么多文档,所以我现在为此感到痛苦。

List<T>在课堂上一直在使用,效果很好。

现在,我已经阅读了一些文档,并指出我应该一直在使用ICollection<T>。我改成了这个,它甚至没有引起模型上下文的改变。这是因为List<T>ICollection<T>都继承了IEnumerable<T>,而这正是EF实际需要的吗?

但是,如果是这样的话,为什么不EF文档状态,它需要IEnumerable<T>的不是ICollection<T>

无论如何,我做过的事情有什么弊端,还是我应该改变它?


阅读 189

收藏
2020-05-19

共1个答案

一尘不染

ICollection<T>之所以会使用实体框架,是因为它需要支持Add不是IEnumerable<T>接口一部分的操作。

另请注意,您
使用ICollection<T>,只是将其作为List<T>实现公开。List<T>随之带来的IList<T>ICollection<T>IEnumerable<T>

至于您所做的更改,尽管可行,但通过界面进行公开是一个不错的选择List<T>。该接口定义合同,但不定义实现。实现 可能会
改变。例如,在某些情况下,实现可能是HashSet<T>。(顺便说一下,(这是一种思维方式,您不仅可以将其用于实体框架)。一种好的面向对象的实践是针对接口而不是实现进行编程。实现可能并且将会改变。)

2020-05-19