首页 新闻 会员 周边 捐助

EF导航属性

0
[已解决问题] 解决于 2018-03-21 17:01

EF实体一对多的时候 virtual 属性如果是个集合 到底用List<T> 还是IEnumerable<T> 还是用ICollection<T>,有什么区别

三大神捕之四的主页 三大神捕之四 | 初学一级 | 园豆:55
提问于:2017-08-01 20:03
< >
分享
最佳答案
0

看实际用途用,使用时区别,IEnumerable<T> 读,ICollection<T>功能更多可Add/Remove,List<T>更多 还可以Index 查询。

奖励园豆:5
Qlin | 老鸟四级 |园豆:2403 | 2017-08-02 15:32
其他回答(1)
0
    public interface IEnumerable<out T> : IEnumerable
    {
        IEnumerator<T> GetEnumerator();
    }

    public interface ICollection<T> : IEnumerable<T>, IEnumerable
    {
        int Count { get; }
        bool IsReadOnly { get; }
        void Add(T item);
        void Clear();
        bool Contains(T item);
        void CopyTo(T[] array, int arrayIndex);
        bool Remove(T item);
    }

 

我个人觉得还是ICollection<T>比较好:

1. IEnumerable<T>是所有集合的基类,但是只实现了GetEnumerator()方法,可以使用foreach遍历,其他的都是扩展方法。

2. ICollection<T>,增加了一些元素,如Count、Add()、Remove()等属性或方法。

3. List<T>提供的操作更为齐全,但是倾向于对本集合中的元素进行些处理,像Sort()、Reverse()等方法。同时,List<T>作为导航属性也不灵活。我想通过导航属性添加多个对象到数据库,使用ICollection<T>时既可以指向一个list集合,也可以指向一个数组等,但是List类型的导航属性就只能指向list或其派生类型了。

Mad_Rabbit | 园豆:307 (菜鸟二级) | 2018-03-28 10:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册