2014-02-19 2 views
0

Getting это:Почему EF 4.1 код первого возвращает HashSet вместо коллекции

System.Collections.Generic.HashSet`1[Counter] 

Ожидая это:

ICollection<Counter> 

// базовый объект:

public virtual ICollection<Counter> Counters { get; private set; } 

Я м с использованием DevExpress PropertyGridControl:

dxprg:CollectionDefinition Path="Counters" Type="{x:Type efo:Counter}" 

Я рассматриваю это нормальное поведение для EF, учитывая, что я не вызываю никакой функции в коллекции счетчиков, например, ToList(), но из-за свойства Path в CollectionDefenition неясно, как это сделать. Я мог бы создать объект в реальном времени, заполнить его равными значениями, сгенерировать коллекцию, а затем привязать к ней, но это кажется действительно грязным.

Любая мудрость о том, что происходит здесь в отношении EF приветствуется ..

ответ

2

Entity Framework необходимо что-то для реализации ICollection Он использует HashSet<T>, потому что это довольно эффективным ICollection<T> реализации. В конце концов, каждый объект, реализующий интерфейс, всегда имеет определенный класс.

+0

OK, это имеет смысл. Таким образом, мне нужно будет создать объект на уровне пользовательского интерфейса с помощью коллекции typeof как «конкретный класс». Правильно ли это? – VipX1

+0

Если вы инициализируете коллекцию самостоятельно, да, это должна быть реализация 'ICollection '. HashSet также хорошо работает, потому что он имеет уникальные элементы, поэтому они хорошо сопоставляются с записями базы данных. –

+0

'[NotMapped] public IList CountersList { get {вернуть это.Counters.ToList(); } } 'Размещено в объекте счетчика объектов. Решает проблему достаточно аккуратно. Спасибо, Герт. – VipX1

Смежные вопросы