在我开始设计一些 Entity Framework 应用程序之前,我只看了几个网络广播。我真的没有读那么多文档,我觉得我现在正在为此受苦。
我一直在使用 List<T>
在我的类里面,效果很好。
现在我已经阅读了一些文档,它指出我应该一直使用 ICollection<T>
.我改成了这个,它甚至没有引起模型上下文的变化。这是因为List<T>
和 ICollection<T>
继承IEnumerable<T>
,而这正是 EF 实际需要的?
但是,如果是这种情况,为什么 EF 文档没有说明它需要 IEnumerable<T>
而不是 ICollection<T>
?
无论如何,我所做的是否有任何缺点,或者我应该改变它?
最佳答案
Entity Framework 将使用 ICollection<T>
因为它需要支持 Add
不属于 IEnumerable<T>
的操作界面。
另请注意,您正在使用ICollection<T>
,您只是将其公开为 List<T>
执行。 List<T>
随身携带IList<T>
, ICollection<T>
, 和 IEnumerable<T>
.
至于你的改变,通过界面公开是一个不错的选择,尽管 List<T>
在职的。接口(interface)定义契约而不是实现。实现可以改变。在某些情况下,也许实现可以是 HashSet<T>
, 例如。 (顺便说一下,这种心态不仅可以用于 Entity Framework 。一个好的面向对象实践是针对接口(interface)而不是实现进行编程。实现可以而且将会改变。)
关于c# - Entity Framework 中的 ICollection<T> 与 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655845/