В чем разница между списком <xx> и HashSet <xx> в конструкторе класса с EF6?

c# entity-framework entity-framework-6

Вопрос

Я использую Entity Framework 6 и определяю таблицу ObjectiveDetail.

Я видел два способа создания класса ObjectiveDetail. Один, который создает список и другой 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; }
}

Принятый ответ

Чтобы развернуть, почему важно, чтобы HashSet обеспечивал уникальность в этой ситуации, отношения, которые представляет собой свойство навигации, должны рассматриваться с точки зрения моделирования данных.

Хотя у вас может быть entity A связанный с entity B более одного раза, даже если оба отношения 1 -> много, каждое отношение на стороне A связано только с данным экземпляром объекта на стороне B только один раз. Поэтому это лучше всего представить с помощью HashSet.

В случае примера выше A будет иметь два свойства навигации HashSet , B1 и B2 , а не один список для обработки обоих отношений.


Популярные ответы

Я думаю, что это зависит от того, должны ли элементы коллекции быть уникальными или нет, с точки зрения базы данных это, вероятно, уникальное ограничение, применяемое к столбцу.

Hashset содержит только уникальные элементы, в то время как List может содержать дубликаты.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему