c# - Entity Framework 中的 ICollection<T> 与 List<T>

标签 c# list ef-code-first ienumerable icollection

在我开始设计一些 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/

相关文章:

c# - Win2D 梯形校正

c# - 在 LinkedList 中查找类

c++ - std::list 中的迭代器感知对象

entity-framework - 实体对象用于新添加的对象而不是动态代理 Entity Framework

c# - 从 OleDbDataReader 读取 Access 数据库取回值

java - java中将非参数化列表转换为参数化列表

python - 在 Python 中拒绝列表的快速方法

c# - Entity Framework - 外键组件......不是类型的声明属性

entity-framework - Entity Framework - 与假外键的关系(数据库中没有外键)

c# - C# 中 'try' 的性能成本