Voici la scène ..... I 2 contextes distincts dans LINQ, la base de données actuelle est une, et les contextes soulèvent des inquiétudes de base, et dans ce cas, j'utilise 3 tables.LINQ to SQL Plusieurs fichiers DBML
Tableau 1 (AccountId) (Contexte 1)
Tableau 2 (personID) (Contexte 2)
Tableau 3 (AccountId, personID) (Contexte 2)
Alors qu'est-ce qui se passe ici est Cela (Context 2) ne peut créer un enregistrement sur le tableau 3 qu'après un enregistrement a été créé dans le tableau 1.
Dans cet esprit, j'ai créé un ActionScheduler, qui prend tous les 3 objets Linq to SQL, et crée des observateurs sur les propriétés importantes (AccountId, PersonId) et lorsque les deux ne sont pas les valeurs par défaut (0), signifiant qu'ils ont été insérés, l'objet 3rd (Table 3) est ensuite assi- gné à AccountId et ajouté à la liste Table 2s des objets Table 3.
Donc, ce que j'aurais à faire techniquement, c'est d'appeler deux fois SubmitChanges et les choses seraient bien.
Eh bien c'est exactement quand les choses se décomposent. Je fais le premier appel, le tableau 1, est inséré en déclenchant l'événement sur l'ActionScheduler, puis met à jour l'objet Table 3, puis Table 2 obtient l'objet Table déclencheur inséré, qui maintenant répondent à l'exigence (Les deux PersonId, AccountId sont valides), Table 3 objet est ajouté à l'objet Table 2. La seconde sauvegarde est appelée, et il n'y a pas de modifications ici, donc rien n'est ajouté, maintenant si les mêmes contextes sont ouverts, j'ajoute un autre ensemble d'objets, et je sauvegarde tout, le nouvel objet Table 3 ne reçoit pas ajouté (même comportement), mais l'autre fait avec des valeurs parfaites, donc il semble que ce gars est toujours un pas en arrière.
Des sugestions? Existe-t-il une meilleure façon de procéder, à quel point le cycle de vie SubmitChanges est-il exaclté?
Désolé pour toutes les questions, mais cela me dérange vraiment. Et un merci évident.
Il ne sera pas comme je l'ai décrit, la Table1 quitte dans un autre contexte, ce qui signifie que je ne peux pas garantir l'ordre d'exécution, donc l'accountId dans le compte, sera 0, et échouera. – Oakcool
Bon, et je dis que vous ne devriez pas faire pour séparer DBML pour une seule base de données. Si vous faites tout à partir du même DataContext (comme prévu), l'ordre d'exécution est géré pour vous. – Nate