In diesem Fall könnten Sie einen gelöschten gespeicherten proc verwenden, der genauso wie Ihr Update-Prozess aufgerufen wird. Die Lösch proc muss nicht tatsächlich eine FROM Tabellenabfrage durchführen DELETE, sondern könnte ein Update auf der zugrunde liegenden Tabelle tun, um die IsDeleted Flagge als entsprechende Einstellung:
CREATE PROCEDURE
@Id int
AS
UPDATE dbo.Employee
SET IsDeleted = 1
WHERE Id = @Id
würden Sie dann diese Funktion auf das Löschverhalten Karte in LINQ to SQL, so wie Sie die Update-Methode durchgeführt haben. Mit dieser Option würde Ihre Kundennummer ein einfaches Entfernen auf dem Tisch tun und nicht mit der IsDeleted Flagge zu tun:
_dataContext.Employee.Remove(ild);
_dataContext.SubmitChanges();
In Ihrem Modell, würde ich argumentieren, dass Sie gar nicht aussetzen sollten IsDeleted. Das ist ein Datenbankimplementierungsdetail. Wenn Sie weiche Löschvorgänge verwenden, sollten Sie Ihre physische Tabelle abstrahieren und die Funktionalität durch Sichten oder Tabellenwertfunktionen verfügbar machen.
Als Alternative zu der Option für das Löschen können Sie auch eine Tombstone-Tabelle in Betracht ziehen, die Ihre Transaktionstabelle nachahmt. Verwenden Sie bei einer Löschoperation einen gespeicherten Prozess oder Trigger, um den Datensatz aus der Transaktionstabelle in die Tombstonetabelle zu verschieben. Damit können Sie das IsDeleted-Flag aus der Datenbank entfernen und die Notwendigkeit beseitigen, die Filterung für alle Zugriffe (einschließlich Berichte) einzuschließen.
könnten Sie Ihren Code für uns posten, damit wir Ihnen helfen können> – StevenMcD
Soft-Löschungen sind ein viel schwierigeres Design, als sie Kredit gegeben werden: http://weblogs.asp.net/fbouma/archive/2009/02 /19/soft-deletes-are-bad-m-kay.aspx –