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