哪种集合类型最适合在实体框架中创建poco类?
问题描述:
我们有以下两张表,其中收集类型是最适合这种情况的,我们如何选择其他情况。哪种集合类型最适合在实体框架中创建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;}
}
答
在这种情况下不要紧,EF将默认到位使用List<T>
上ICollection<T>
。集合类型也不会影响LINQ查询。在其他情况下,您应该选择哪些集合更适合您的应用程序逻辑。常见的选择是List<T>
和HashSet<T>
。
答
一般的建议是使用最不特定的类型/接口,即ICollection<T>
,除非你想强制执行特定的要求。
原因是您可以*使用适合任何情况的特定类型。让我举个例子。
假设您有一种方法将Employee
添加到新的Company
,但您希望保证这些员工的名称是唯一的。如果Company.Employees
是ICollection<T>
,则现在可以使用HashSet<Employee>
,该名称由constructor taking an IEqualityComparer<Employee>
按名称比较Employee
进行初始化,并将其分配给Company.Employees
。
对于其他sceneario的你可能想使用List<Employee>
,因为AddRange
派上用场。
用于从数据库中首先反向工程代码的Visual Studio工具创建POCO类,该类初始化其集合的时间为HashSet
s,因为它们提供高性能集合操作。