2009-07-07 4 views
2

Ich stoße auf ein Problem, bei dem meine CRUD-Operationen für eine aus einer SQL-Ansicht stammende Entität die generierten Methoden für diese Operationen nicht aufrufen.Umgang mit CRUD-Operationen für eine Linq-SQL-Ansicht

Beispiel:

Ich drücke "Löschen" in einem Listview auf ein Element, mit einem LinqDataSource verbunden. Es wird ein Fehler ausgegeben, der besagt, dass der Vorgang nicht ausgeführt werden kann, da er sich auf mehrere Basistabellen auswirkt. Das ist in Ordnung, das verstehe ich. Was ich nicht verstehe ist, warum dieser Code nicht auf Insert ausführen/löschen:

Public Partial Class Entity 

Private Sub DeleteEntity(instance as Entity) 
    Throw New Exception("TEST") 
End Sub 

End Class 

In debug, es wird nicht auf der Methode brechen, so ist es nicht genannt zu werden. Ich habe sogar einen Test gemacht, bei dem ich die Entität gelöscht habe, indem ich/DeleteOnSubmit angefügt habe und immer noch nicht gehe. Ist das ein Fehler oder behandle ich nicht die richtige Methode?

Hinweis: Ja, ich kann das OnDeleting-Ereignis einer Datenquelle verarbeiten, abbrechen usw. (was meine vorläufige Fehlerbehebung ist), aber ich möchte wirklich ALLE Löschvorgänge an einem zentralen Ort abfangen, egal wie ich die Entität lösche .

Antwort

0

Es sollte eine partielle Methode für Ihre Entität namens OnValidate (Aktion System.Data.Linq.ChangeAction) geben. Das ist vielleicht das, wonach Sie suchen.

Private Partial Sub OnValidate(action As System.Data.Linq.ChangeAction) 
    If action = System.Data.Linq.ChangeAction.Delete 
     Throw New Exception("TEST") 
    End If 
End Sub 
+0

Danke, das funktioniert, wenn auch nicht so groß wie das Überschreiben der verschiedenen CRUD-Aktionen wäre. Es wird, denke ich. – kamranicus

+0

Ja, es wäre schöner, die ChangeAction nicht testen zu müssen, aber das war das nächste, was ich finden konnte, das mehr oder weniger so funktionieren würde, wie du es gerne hättest. –

+0

Ich verwendete auch benutzerdefinierte gespeicherte Prozeduren, die CUD-Operationen ausführen, da dies besser funktionierte und diese Operationen sowohl von LinqDataSource-Steuerelementen als auch von programmatischen Operationen behandelt wurden. – kamranicus