哪种集合类型最适合在实体框架中创建poco类?

时间:2015-06-27 21:22:21

标签: entity-framework

我们有两个表,哪种集合类型最适合这种情况,以及我们如何在其他情况下选择。

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;}
}

2 个答案:

答案 0 :(得分:1)

一般建议使用最不具体的类型/接口,即ICollection<T>,除非您要强制执行特定要求。

原因是您可以自由使用适合任何情况的特定类型。让我举个例子。

假设您有一种方法可以将Employee添加到新的Company,但您希望保证这些员工的姓名是唯一的。如果Company.EmployeesICollection<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>