2010-04-07 4 views
5

Załóżmy, że mam tabelę zamówień w mojej bazie danych i odpowiadającą jej klasę modelu wygenerowaną przez projektanta VS2008 "Linq to SQL Classes". Załóżmy, że mam również przechowywaną procedurę (ProcessOrder) w mojej bazie danych, której używam do wykonania przetwarzania w rekordzie zamówienia.Jak uzyskać Linq-SQL, aby odświeżyć jego lokalną kopię rekordu bazy danych?

Gdybym wykonaj następujące czynności:

var order = dataContext.Orders.Where(o => o.id == orderId).First(); 

// More code here 

dataContext.ProcessOrder(orderId); 

order.Status = "PROCESSED"; 

dataContext.SubmitChanges(); 

... wtedy będę miał naruszenie współbieżności jeśli ProcessOrder przechowywane proc zmieniła kolejność (co jest oczywiście bardzo prawdopodobne), ponieważ L2S wykryje że rekord zamówienia został zmieniony i nie uda się przesłać zmian do tego zamówienia.

Wszystko to jest dość logiczne, ale co jeśli chce zaktualizować rekord zamówienia po wywołaniu zapisanego proc? Jak mogę powiedzieć L2S, aby zapomniał o swojej kopii w pamięci podręcznej i odświeżył ją z DB?

Odpowiedz

15

Można to zrobić za pomocą metody Refresh na kontekstu danych, tak jak poniżej:

DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, 
        DataContext.Orders); 
+0

Perfect. Widzę, że mogę również określić konkretny rekord zamówienia, który jest dokładnie tym, czego potrzebuję. Dzięki! –

+1

Ale nie aktualizuje powiązanej właściwości kolekcji nawigacji, która mapuje do innej tabeli. Aktualizuje tylko te właściwości, które są odwzorowane na kolumnę tabeli, do której wskazuje aktualna Jednostka. Czy istnieje wyjście z tego? – RBT

Powiązane problemy