具有EF6的类构造函数中List <xx>和HashSet <xx>之间的区别是什么?</xx> </xx>

时间:2014-01-28 12:12:51

标签: c# entity-framework entity-framework-6

我正在使用Entity Framework 6并定义一个名为ObjectiveDetail的表。

我已经看到了两种创建ObjectiveDetail类的方法。一个创造 一个List和另一个HashSet。

有什么区别?

public partial class ObjectiveDetail {
    public ObjectiveDetail() {
        this.SubTopics = new List<SubTopic>();
    }
    public int ObjectiveDetailId { get; set; }
    public int Number { get; set; }
    public string Text { get; set; }
    public virtual ICollection<SubTopic> SubTopics { get; set; }
}

public class ObjectiveDetail 
{
    public ObjectiveDetail() {
        this.SubTopics = new HashSet<SubTopic>();
    }
    public int ObjectiveDetailId { get; set; }
    public int Number { get; set; }
    public string Text { get; set; }
    public virtual ICollection<SubTopic> SubTopics { get; set; }
}

2 个答案:

答案 0 :(得分:4)

我认为这取决于集合中的项目是否应该是唯一的,就数据库而言,它可能是应用于列的唯一约束。

Hashset只包含唯一的项目,而List可以包含重复项。

答案 1 :(得分:0)

为了扩展HashSet在这种情况下强制唯一性的重要性,导航属性所代表的关系必须考虑数据建模。

虽然您可能entity A多次与entity B相关,但即使两个关系都是1 - >很多,A侧的每个关系只与B侧的实体的给定实例相关一次。因此,最好用HashSet表示。

对于上面的示例,A将有两个HashSet导航属性,B1B2,而不是一个List来处理这两种关系。