当我在我的域中有实体列表的实体时,它们应该作为IList或IEnumerables公开吗?例如Order有一堆OrderLines.
谁能给我解释一下为什么我们不断地使用IEnumerable遍布C#的时候,我的逻辑,我们应该使用List,IList或ICollection代替。
好的,数字1)IEnumarable仅应用于只读集合!
太好了,每个人都在重复这一点(我明白了),所以为什么我需要不断地ToList()对每个数据库进行调用,以防止在原始线程处理上下文时多线程陷入僵局。
当然,一旦查询被枚举为列表,我们应该从那里开始使用List以避免混淆,线程安全问题ToList(),并一遍又一遍地不断调用每个模型。
同样在解析JSON(已枚举对象的文本表示形式)的WebAPI上,我们再次将其存储为IEnumarable。我们已经知道大小了,我们对延迟加载不感兴趣,我们可能会沿行修改该对象,所以为什么不将其存储为List of。
- 编辑
这个问题的一个重要方面是,我从不知道协方差和逆方差
List<IItem>由于List实现上的运行时问题,您无法执行此操作,因此必须使用IEnumarable<IItem>-仅在特定情况下有意义,即在两个不同系统上具有相同实体且需要使用一段代码的情况。否则,我List<>自问这个问题以来一直在使用,那大概90%的时间正确用于业务层。数据库/存储库层现在坚持使用IColletion或IQueryable。