LINQ-to-SQL + Un-à-Plusieurs + suppression de la liaison de données

- Je utiliser LINQ-to-SQL pour charger des données depuis une base de données qui a deux tables dans une relation (une Recette a beaucoup d'Ingrédients).

Je charge une Recette et LINQ récupère Ingrédient objets dans un EntitySet est lié dans une ListBox.

Si je veux supprimer certains Ingrédients hors de la Recette, j'obtiens un "Une tentative a été faite pour supprimer une relation entre une Recette et Ingrédients. Cependant, l'un de la relation de clés étrangères (Ingrédient.RecipeID) ne peut pas être null.

J'ai RÉSOLU ce problème en utilisant la bien connue de la solution en ajoutant 'DeleteOnNull="true"' pour le fichier DBML. Mais l'ajout de ce paramètre supprime uniquement le problème lorsque nous sommes à la suppression des Ingrédients les objets qui ont été récupérés à partir de la DB.

Le problème est avec l'Ingrédient objets qui ont été créés dans le code (pour une Recette) et ajouté à l'EntitySet collection des Ingrédients et puis supprimés AVANT SubmitUpdates est appelé. Puis, la même exception se produit de nouveau. Cela se produit généralement sur une nouvelle, non enregistrées recette lorsque l'utilisateur est à ajouter des ingrédients à elle, fait une erreur et efface un ingrédient hors de la recette. J'ai ajouté le DeleteOnNull à la fois à " l'Association Nom="Recipe_Ingredient"' lignes dans DBML.

Comment suis-je censé supprimer de tels objets? La seule solution que je vois pour le moment est que je voudrais charger les ingrédients dans une collection n'est pas sous le DataContext et ensuite lors de l'enregistrement, supprimer tous les ingrédients hors de la recette et ajouter puis à nouveau à partir du cache..

Parlez-vous de Linq-SQl et Linq to entities??
Est-ce que votre nouveau Reciepe objet appartenant à un DataContext lorsque vous ajoutez/supprimez des Ingrédients objets?
non (lorsque la recette est nouveau) et oui (si c'est un existant, consulté le fron DB et d'avoir des ingrédients ajoutés).

OriginalL'auteur Jurij | 2008-12-21