我们有两个表,哪种集合类型最适合这种情况,以及我们如何在其他情况下选择。
public class Employee{
public int Id {get;Set;}
public string Name{get;set;}
}
public class Comapany{
public int Id {get;set;}
public string Name {get;set;}
public virtual ICollection<Employee>employees{get;set;} or
public virtual list<Employee>employees{get;set;}
}
答案 0 :(得分:1)
一般建议使用最不具体的类型/接口,即ICollection<T>
,除非您要强制执行特定要求。
原因是您可以自由使用适合任何情况的特定类型。让我举个例子。
假设您有一种方法可以将Employee
添加到新的Company
,但您希望保证这些员工的姓名是唯一的。如果Company.Employees
是ICollection<T>
,您现在可以使用HashSet<Employee>
按constructor taking an IEqualityComparer<Employee>
按名称比较Employee
进行初始化,并将其分配给{{1} }}
对于其他sceneario,您可能希望使用Company.Employees
,因为List<Employee>
会派上用场。
用于从数据库进行代码优化的逆向工程的Visual Studio工具创建了由AddRange
初始化其集合的POCO类,因为它们提供了高性能的集合操作。
答案 1 :(得分:0)
在这种情况下,无关紧要,默认情况下,EF会在List<T>
上使用ICollection<T>
。集合类型也不会影响LINQ查询。在其他情况下,您应该选择哪种集合更适合您的应用程序逻辑。常见的选择是List<T>
和HashSet<T>
。