[c#] Entity Framework .Remove () par rapport à .DeleteObject ()



Answers

Si vous voulez vraiment utiliser Deleted, vous devrez rendre vos clés étrangères nulles, mais vous finirez avec des enregistrements orphelins (ce qui est l'une des principales raisons pour lesquelles vous ne devriez pas le faire en premier lieu). Il suffit donc d'utiliser Remove()

ObjectContext.DeleteObject (entité) marque l'entité comme Supprimé dans le contexte. (EntityState est supprimé par la suite.) Si vous appelez SaveChanges après, EF envoie une instruction SQL DELETE à la base de données. Si aucune contrainte référentielle dans la base de données n'est violée, l'entité sera supprimée, sinon une exception est levée.

EntityCollection.Remove (childEntity) marque la relation entre parent et childEntity comme Deleted. Si childEntity est lui-même supprimé de la base de données et que ce qui se passe exactement lorsque vous appelez SaveChanges dépend du type de relation entre les deux:

Une chose à noter est que le réglage .State = EntityState.Deleted ne déclenche pas automatiquement la modification détectée. ( archive )

Question

Vous pouvez supprimer un élément d'une base de données en utilisant EF en utilisant les deux méthodes suivantes.

Le premier est sur EntityCollection et le second sur ObjectContext .

Quand devrait-on utiliser chacun d'eux?

L'un est-il préféré à l'autre?

Remove() renvoie un bool et DeleteObject() renvoie void .






Related