Существует ли EF, эквивалентный LINQ to SQL's OnCreated partial?
Некоторые из моих объектов имеют поля XML, которые я хотел бы анализировать всякий раз, когда объект загружается из базы данных - я хотел бы поместить данные XML в более удобные строго типизированные коллекции. Я уже пометил поле XML как частное и подключил событие SavingChanges для повторного построения XML до того, как элемент будет передан обратно в базу данных, но я не могу понять, как заполнять коллекции всякий раз, когда объект загружается.
Я подумал об использовании партиала OnFieldChanged для моего поля XML, но он будет запускаться снова, когда поле XML перестраивается во время SavingChanges, поэтому кажется, что должен быть лучший способ.





Насколько мне известно, нет события OnLoaded или подобного. Обходной путь может заключаться в том, чтобы предоставить коллекции как свойства и лениво создавать / анализировать значения при первом доступе:
private List<SomeData> _parsedDataCache;
public IList<SomeData> ParsedData {
get {
if (_parsedDataCache == null)
ParseData();
return _parsedDataCache;
}
}
Вы должны создать частичный класс (как в LINQ to SQL) и просто использовать конструктор по умолчанию.
Это не работает. Значения поля XML еще не установлены во время создания.
Первоначальный вопрос был «Есть ли EF, эквивалентный LINQ to SQL OnCreated partial», и мой ответ имеет отношение к этому.
Или используйте событие ObjectContext.ObjectMaterialized в .net 4.0
Я сделал это для нескольких полей .. Я обычно помещаю общее поле [Data] NVARCHAR (MAX) во все свои таблицы для такой расширяемости .. тогда у меня есть метод void SetData (action <XElement data> runner). Это позволяет контексту переводить в базовый XElement из строки (кэшированной), а затем обновлять после ... Я также подключился через SavingChanges для вызова частного метода void BeforeSave (), если он существует в частичном ... в целом неплохо.