2015-06-27 75 views
1

我们有以下两张表,其中收集类型是最适合这种情况的,我们如何选择其他情况。哪种集合类型最适合在实体框架中创建poco类?

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

在这种情况下不要紧,EF将默认到位使用List<T>ICollection<T>。集合类型也不会影响LINQ查询。在其他情况下,您应该选择哪些集合更适合您的应用程序逻辑。常见的选择是List<T>HashSet<T>

1

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

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

假设您有一种方法将Employee添加到新的Company,但您希望保证这些员工的名称是唯一的。如果Company.EmployeesICollection<T>,则现在可以使用HashSet<Employee>,该名称由constructor taking an IEqualityComparer<Employee>按名称比较Employee进行初始化,并将其分配给Company.Employees

对于其他sceneario的你可能想使用List<Employee>,因为AddRange派上用场。

用于从数据库中首先反向工程代码的Visual Studio工具创建POCO类,该类初始化其集合的时间为HashSet s,因为它们提供高性能集合操作。