2008-12-04 8 views
3

Existe-t-il un équivalent EF pour LINQ to OnCreated partiel?Accrocher un événement de chargement d'objet dans Entity Framework?

Plusieurs de mes objets ont des champs XML que je voudrais analyser lorsque l'objet est chargé à partir de la base de données - je voudrais mettre les données XML dans des collections fortement typées plus amicales. J'ai déjà marqué le champ XML comme privé et j'ai accroché l'événement SavingChanges pour reconstruire le XML avant que l'élément ne soit renvoyé à la base de données, mais je n'arrive pas à remplir les collections à chaque chargement de l'objet. J'ai pensé à utiliser le partial OnFieldChanged pour mon champ XML, mais cela recommencerait à chaque fois que le champ XML est reconstruit pendant SavingChanges, donc il semble qu'il devrait y avoir un meilleur moyen.

Répondre

2

Il n'y a pas d'événement OnLoaded ou similaire pour autant que je sache. Une solution pourrait être d'exposer les collections que les propriétés et paresseusement créer/analyser les valeurs du premier accès:

private List<SomeData> _parsedDataCache; 
public IList<SomeData> ParsedData { 
    get { 
     if (_parsedDataCache == null) 
      ParseData(); 
     return _parsedDataCache; 
    } 
} 
+0

Je l'ai fait pour quelques champs .. J'ai tendance à mettre un champ générique [Data] NVARCHAR (MAX) sur toutes mes tables pour cette extensibilité. puis j'ai une méthode SetData vide (action runner). Cela permet au contexte de traduire en une base XElement à partir de la chaîne (mise en cache), puis de la mettre à jour après ... J'ai également câblé via la méthode SavingChanges pour appeler une méthode privée BeforeSave() si elle existe dans une partie ... plutôt bien dans l'ensemble. – Tracker1

-2

Vous devez créer une classe partielle (comme vous le faites dans LINQ to SQL) et il suffit d'utiliser le constructeur par défaut.

+0

Cela ne fonctionne pas. Les valeurs de champ XML ne sont pas encore définies au moment de la construction. –

+0

la question initiale était "Existe-t-il un EF équivalent à LINQ to OnCreated partiel" - auquel ma réponse est pertinente. – Baldy

3

Ou utiliser événement dans ObjectContext.ObjectMaterialized .net 4.0