Si vous ne souhaitez pas accéder à la base de données pour récupérer tous les champs de l'objet, vous pouvez créer une nouvelle instance de la classe, l'attacher à un nouveau contexte, l'enlever et enregistrer les modifications. Cela permet à EF de générer la commande de suppression appropriée.
using (var context = new MyContext())
{
var myObject = new MyObject { ID = 3 };
context.MyObjectSet.Attach(myObject);
context.MyObjectSet.DeleteObject(myObject);
context.SaveChanges();
}
Remarque: ceci entraînera une exception si vous essayez de supprimer un objet qui n'existe pas. C'est seulement approprié si vous êtes sûr que l'objet existe.
Note 2: cela suppose que vous avez configuré vos entités afin que généré Supprimer de commande pas d'autres champs que l'ID (ce qui signifie pas de propriétés Horodatage, ou quelque chose de similaire qui seraient inclus dans la requête)
Est-ce que cela fonctionne vraiment? Doux! Ça va être utile. +1 – BZink
Cela fonctionne, mais j'aurais dû ajouter que cela ne fonctionne que si la commande delete générée par EF ne référence aucun autre champ que l'ID. Si vous avez un champ Horodatage, EF l'inclura dans la requête générée, mais comme il ne connaît pas la valeur à utiliser, la requête sera erronée. – hvd