Entity Framework sur la cascade de suppression
J'ai des problèmes avec la suppression des lignes connexes dans l'Entity Framework 4.1. J'ai des tables avec des relations
Livre 1<--->* BookFormats
J'ai mis la clause on delete cascade:
ALTER TABLE [dbo].[BookFormats] WITH CHECK ADD CONSTRAINT [FK_BookFormats_Book]
FOREIGN KEY([BookID]) REFERENCES [dbo].[Book] ([BookID]) on delete cascade
L'EDMX propriété
Alors, je veux supprimer tous les BokFormats
les éléments liés à mon Book
objet:
var originalBook = m.db.Book.First(x => x.BookID == bookId);
originalBook.BookFormats.Clear();
m.db.SaveChanges();
Mais, j'obtiens l'erreur:
L'opération a échoué: La relation ne peut pas être changé parce que
un ou plusieurs de la clé étrangère propriétés est pas les valeurs null. Lorsqu'un
modification est apportée à une relation, la clé étrangère de la propriété est
la valeur null. Si la clé étrangère ne prend pas en charge les valeurs null,
une nouvelle relation doit être définie, la clé étrangère de la propriété doit être
attribué une valeur non null, ou sans rapport avec l'objet doit être
supprimé.
J'ai manqué d'idées sur la façon de supprimer ces objets. Des idées?
source d'informationauteur Tony
Vous devez vous connecter pour publier un commentaire.
Cascade de suppressions concept est comme suit:
Lorsque vous supprimez
Book
à partir de la DB, toutes liéesBookFormats
sera supprimé pour vous par SQL Server (veuillez noter qu'il n'a pas d'importance comment la suppression deBook
sera lancé via EF ou SQL brut). Ainsi, il n'a rien à voir avec votre tâche: "je veux supprimer tous lesBookFormats
lié à monBook
". Pour l'accomplir, vous besoin de quelque chose comme ceci:Vous pouvez utiliser RemoveRange :
Mais c'est pour EF 6.0
Vous n'êtes pas la suppression de la
BookFormats
à partir de la base de données, mais vous êtes en train de supprimer la relation, ainsi orpahning votreBookFormats
et le réglage de laBookID
colonne de NULL. La suppression de la cascade vous avez mis sur la base de données ditWhen I delete the
Livrethen delete all of the
BookFormatsthat have a
BookIDequal to mine.
Vous ne le supprimez pas le livre que vous êtes en train de supprimer les formats à partir de laBook
.Au lieu de
originalBook.BookFormats.Clear()
vous devriez avoir quelque chose comme ça...Il devrait être quelque chose le long de ces lignes. Je ne l'ai pas en face de moi à me souvenir comment EF constructions de la suppression de la méthode dans l'EDMX.
- Je utiliser EF6 et cela fonctionne.
Je l'ai testé en EF 6.1.3 et cela devrait fonctionner: