Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Entity Frmaework & runtime casting


Автор: Kefir 29.8.2010, 19:09
Вечер добрый. Надеюсь, что среди нас есть спецы по EF. Итак, суть такова - есть EF модель, POCO, Proxies, все дела. А есть контрол, который умеет следить за состоянием коллексии через ифейс INotifyCollectionChanged. Так вот суть дела такая - привязка к коллекции происходит так:
Код

public void TryBindToCollection(IEnumerable collection)
{
    INotifyCollectionChanged c = collection as INotifyCollectionChanged;

    // раз законвертить не удалось, то просто выходим
    if(c == null) return;

    // тут идёт привязка и прочее
    c.SomeEvent += someHandler;
}


С обычными коллекциями (к примеру ObservableCollection) это прекрасно работает. Только вот когда доходит дело до навигационных свойств обьектов EF преобразование типов не помогает. То биш возвращает null. То есть в модели, где есть свойство:
Код

public class MyEntity
{
    // Navigation properies
    public virtual ICollection<MyChildEntity> Children;
}

Преобразование его в рантайме даст null. А должно быть валидным, ибо прокси преобразуют это дело в EntityCollection. В рантайме я уже исследовал тип вдоль и поперёк - вроде должно быть всё правильно, но не работает. Пока нашел вариант подписки на события самого EntityCollection через dynamic, но это как-то похоже на хак - приходится вязаться и с INotifyCollectionChanged и с EntityCollection.

Вопрос - собстна кто-нибудь может мне объяснить такое странное поведение и как таки можно преобразовать это дело нормальным образом? Ведь если dynamic спокойненько позволяет привязать к EntityCollection, то и обычное приведение типов должно сработать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)