J'utilise l'Entity Framework Ado.Net avec ASP.NET MVC.ADO.NET Entity Framework: Comment obtenir des suppressions automatiques en cascade?
Dans mon MSSQL 2008 Base de données J'ai par exemple les tables simplifiées et les relations suivantes:
(Song) 1--* (Version) 1 -- 1 (VersionInfo)
Est-il possible d'avoir automatiquement les versions liées et leur supprimés de VersionInfo quand je supprimer un morceau?
Actuellement, je me sers quelque chose comme le code suivant, ce qui est beaucoup de travail manuel, étant donné que certaines tables ont jusqu'à 8 relations et ces relations ont sous-relations aussi parfois:
db = new Database() //Entities
Song song = db.Song.First();
Song.Version.Load();
foreach(Version version in Song.Version.ToList())
{
//Remove Song-Version Reference.
song.Version.Remove(version);
//Get The VersionInfo so we can delete it after we deleted the Version object.
version.VersionInfoReference.Load();
VersionInfo versionInfo = version.VersionInfo;
//Now we can delete the Version Object.
db.DeleteObject(version);
//Now we can also delete the versionInfo, since the reference is gone.
db.DeleteObject(versionInfo);
}
db.DeleteObject(song);
Il doit y avoir un moyen plus facile façon d'obtenir des suppressions en cascade. J'ai déjà essayé de définir le paramètre de relation dans MSSQL à Cascade lors de la suppression, mais cela n'a rien changé ... Ai-je manqué quelque chose?
De toute façon, comment d'autres personnes résolvent ce problème?
Yep. Si vous supprimez A, B peut toujours exister sans problème. Mais si vous supprimez B, alors A ne peut pas exister (car il pointe vers B, qui n'existe plus). Les suppressions en cascade ne se produisent que lorsque la suppression d'un élément (B) entraîne un autre élément (A) incorrect ou enfreint une contrainte de clé étrangère. – Flater