2008-12-13 8 views
1

J'ai une classe de recette de base et j'utilise un contexte de données. J'ai outrepassé la méthode d'insertion pour la recette dans le datacontext et essaye d'insérer dans ses enfants. Nomatter ce que je fais Je ne peux pas obtenir l'enfant à insérer. Actuellement, juste la recette insère et rien ne se passe avec l'enfant.Insertion prioritaire LinqToSql avec classes internes C#

partial void InsertRecipe(Recipe instance) 
    { 
     // set up the arrays 
     for (int x = 0; x < instance.PlainIngredients.Count; ++x) 
     { 
      instance.TextIngredients.Add(new TextIngredient() 
      { 
       StepNumber = x + 1, 
       Text = instance.PlainIngredients[x] 
      }); 
     } 

     this.ExecuteDynamicInsert(instance); 
    } 

J'ai essayé tout ce que je peux penser. J'ai même instancié un autre datacontext dans la méthode et après que l'instance soit revenue de ExecuteDynamicInsert avec l'id, j'ai essayé de l'ajouter, et j'ai des erreurs de timeout.

Répondre

1

Je l'ai compris. Remplacez SubmitChanges dans DataContext et recherchez toutes les insertions et mises à jour qui sont des recettes. Exécutez l'algorithme pour y ajouter des enfants.

public override void SubmitChanges(
     System.Data.Linq.ConflictMode failureMode) 
    { 
     ChangeSet changes = this.GetChangeSet(); 

     var recipeInserts = (from r in changes.Inserts 
         where (r as Recipe) != null 
         select r as Recipe).ToList<Recipe>(); 

     var recipeUpdates = (from r in changes.Updates 
         where (r as Recipe) != null 
         select r as Recipe).ToList<Recipe>(); 

     ConvertTextData(recipeInserts); 
     ConvertTextData(recipeUpdates); 

     base.SubmitChanges(failureMode); 
    } 
1

Les méthodes InsertX/UpdateX/DeleteX sont appelées après que LINQ to SQL a déterminé quels objets seront inclus dans SubmitChanges.

Vous auriez dû obtenir un délai d'attente en utilisant deux DataContext probablement en raison de problèmes de verrouillage entre les deux transactions.

Je n'arrive pas à comprendre clairement ce que vous essayez d'accomplir ici - normalement LINQ to SQL gère les relations enfants elle-même - qu'est ce que PlainIngredients et TextIngredients?

Questions connexes