Domanda

Ho una tabella SQL che memorizza le foto con un campo SortOrder SMALLINT. Gli utenti possono inserire nuove foto, specificando un criterio di ordinamento decimali per posizionare il nuovo record tra le 2 foto esistenti (o prima della prima foto). Il SortOrder verrà memorizzato come smallint, così quando rilevo che un inserimento si sposterà record esistenti, ho bisogno di aggiornare tutte le foto interessate ad incrementare il SortOrder dal 1.

Questo è facile da fare in una stored procedure, ma sto cercando il modo più efficace per raggiungere questo obiettivo con LINQ to SQL. Se devo tirare tutti i record al client, aggiornarli, e quindi inviare loro, quindi mi limiterò a bastone con la stored procedure che sta già lavorando e molto veloce.

Ecco il T-SQL che sposta i record:

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

C'è un modo per fare questo tipo di aggiornamento di massa in LINQ to SQL senza dover recuperare i record?

È stato utile?

Soluzione

LINQ to SQL non fa dichiarazioni CUD per i set, così bastone con l'implementazione esistente come sarebbe il migliore nello scenario.

Altri suggerimenti

Ho avuto un sacco di successo con questi ragazzi lavorano: http: //www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

Sono solo usandolo in sviluppo per un paio di mesi, ma finora è stato abbastanza buono.

Sì, che avrebbe dovuto tirare giù i vostri oggetti, manipolarli, e spingere indietro.

È lo sProc qualcosa che il cliente è responsabile per la chiamata quando si spinge una nuova foto? Si potrebbe fare bene per configurarlo come un trigger, invece, in modo da l'applicazione non è direttamente responsabile per il passaggio aggiuntivo (facilmente dimenticato). Si tratta di un trade-off in complessità, naturalmente, e una questione di preferenze.

Una possibilità sarebbe quella di costruire la stringa SQL che era nella stored procedure ed eseguirlo tramite il tuo metodo di DataContext.ExecuteQuery. Facendo in questo modo avrebbe impedito i record di essere recuperati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top