Frage

Ich habe eine SQL-Tabelle, dass speichert Fotos mit einem Smallint SortOrder Feld. Benutzer können neue Bilder einfügen, eine Dezimalzahl Reihenfolge, um die Angabe die neue Datensatz zwischen zwei vorhandenen Fotos (oder vor dem ersten Foto) zu platzieren. Die SortOrder wird als Smallint gespeichert werden, so dass, wenn ich erkennen, dass eine Insertion vorhandene Datensätze verschieben, muss ich alle betroffenen Fotos zu aktualisieren, um die SortOrder um 1 zu erhöhen.

Das ist einfach in einer gespeicherten Prozedur zu tun, aber ich bin auf der Suche für den effizienteste Weg, dies mit Linq to SQL zu erreichen. Wenn ich alle Datensätze nach unten an den Client ziehen haben, aktualisieren sie und wirft sie dann einreichen, dann werde ich nur mit der gespeicherten Prozedur halten, die bereits arbeitet und sehr schnell.

Hier ist der T-SQL, dass die Datensätze Verschiebungen:

    UPDATE      Photo
    SET         SortOrder = SortOrder + 1
    WHERE       AlbumId = @AlbumId
    AND         SortOrder >= CEILING(@SortOrder)

Gibt es eine Möglichkeit, diese Art von Massenaktualisierung in Linq to SQL zu tun, ohne die Datensätze holen zu müssen?

War es hilfreich?

Lösung

LINQ to SQL nicht tun CUD-Anweisungen für Sätze, so Stick mit Ihrer vorhandenen Implementierung, da es das Beste in Ihrem Szenario sei.

Andere Tipps

ich hatte viel Erfolg mit dieser Jungs Arbeit: http: //www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

Ich habe es in der Entwicklung erst seit ein paar Monaten mit, aber bis jetzt ist es ziemlich gut.

Ja, Sie müssten Ihre Objekte nach unten ziehen, manipulieren sie, und schieben Sie sie zurück.

Ist das sproc etwas, dass der Client für den Aufruf verantwortlich ist, wenn ein neues Foto drängen? Sie könnten gut tun es als Auslöser einzurichten, statt, so dass Ihre Anwendung nicht direkt verantwortlich für das Extra ist (leicht vergessen) Schritt. Dies ist ein Kompromiss in Komplexität, natürlich, und eine Frage der Präferenz.

wäre eine Option, um die SQL-Zeichenfolge zu erstellen, die in der gespeicherten Prozedur war, und führen Sie es über Ihre DataContext.ExecuteQuery Methode. es auf diese Weise tun, verhindern würde geholt die Datensätze aus zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top