2010-01-07 7 views
0

J'ai une base de données qui a une table appelée m_AttentionFlags qui fait référence à une clé primaire dans m_PermissionCollections. J'ai construit un modèle EntityFramework à partir de cela et créé un DomainService.EntityFramework, RIA insert problem - Mise à jour des objets enfants provoque une insertion

Maintenant, en utilisant RIA sur le client je charge les drapeaux dans le contexte local lors de l'initialisation d'un contrôle:

var query = _context.GetM_AttentionFlagQuery(); 
_context.Load(query, OnGetM_AttentionFlag, null); 

J'ai câblé un bouton pour ajouter un m_PermissionCollection à un m_AttentionFlag sélectionné.

if (lstSelected.SelectedItem != null) { 
if (!(lstSelected.SelectedItem is m_AttentionFlag)) 
{ 
return; 
} 
m_AttentionFlag flag = lstSelected.SelectedItem as m_AttentionFlag; 
m_PermissionCollection coll = new m_PermissionCollection(); //** 
flag.m_PermissionCollections = coll; //** 
_context.SubmitChanges(); 
} 

Curieusement Il en résulte un comportement de l'insert: une m_AttentionFlag supplémentaire avec les mêmes valeurs de champ est ajouté à la base de données avec un m_PermissionCollection associé; l'original reste intact sans que son champ m_PermissionCollections soit affecté. Fait intéressant si vous supprimez les lignes marquées ** et remplacez par une mise à jour d'une propriété publique simple sur m_AttentionFlag, par exemple. flag.Description = "nouvelle description", la mise à jour se déroule comme prévu.

Les méthodes DomainService sont les méthodes par défaut générées par les assistants, et le seul point intéressant est que la modification du champ m_PermissionCollections sur m_AttentionFlag modifie EntityState sur l'élément à Added lorsqu'il est envoyé au serveur. J'ai demandé cette question sur le forum des services RIA et un membre m'a suggéré de rechercher plusieurs instances DomainContext, mais le membre _context n'est créé qu'une seule fois, et le code indiqué ici est à peu près le seul code non généré par le divers outils de studio visuel. Des idées sur ce qui se passe ici?

Aide très appréciée.

Steve

Répondre