2011-06-29 21 views
5

Wiem, że istnieje wiele pytań dotyczących aktualizacji DB z linq do SQL, moje pytanie brzmi, czy robię to w akceptowanym standardzie?Linq to sql update standard

tutaj jest mój kod:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //load data to page 
    } 
    else 
    { 
     using (var db = new App_Data.MyDataContext()) 
     { 
      var Query = (from p in db.peoples 
         where p.ipeople_ID == 59225 
         select p).Single(); 

      Query.cFirstName = FirstName.Value; 

      try { db.SubmitChanges(); } 
      catch (ChangeConflictException) 
      { 
       db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges); 
       db.SubmitChanges(); 
      } 
     } 
    } 
} 

uczę ASP.NET metodą prób i błędów (! I dużo wyszukiwania Google), więc wiem, że to będzie działać, po prostu nie wiem, czy kod będzie rozśmieszyć mnie z konferencji! : D

Dzięki

Odpowiedz

2

Niektóre zmiany:

Chciałbym przenieść swoją logikę od przypadku obciążenia strona, i jawnie wywołać Save/aktualizacji wydarzenie.

Chciałbym rozwiązać konflikt zmian, jeśli tak się dzieje ... Nie ukrywałbym tego błędu i nie próbowałem ponownie wprowadzać zmian.

protected void Page_Load(object sender, EventArgs e) { 
if (!IsPostBack){ 
    //load data to page 
}   
} 

protected void SaveChanges_Click(object sender, EventArgs e) { 
using (var db = new App_Data.MyDataContext()) { 
    var person = db.peoples.SingleOrDefault(p=> p.ipeople_ID == 59225); 

    if(person == null) { 
    // notify UI that person doesn't exist 
    return; 
    } 

    person.cFirstName = txtFirstName.Text; 

    try { db.SubmitChanges(); } 
    catch (Exception ex){ 
    //Log error 
    } 
} 
} 
+0

Więc umieszczając go w swojej własnej metody, po prostu miałbym mój serwer runat runat server, a następnie miał onClick? – Limey

+1

Tak, to zadziała! –

+1

Dzięki za pomoc! chciałbym dać ci odpowiedź! – Limey

2

To wygląda dość standardowe mi się to podejście. Jednak chciałbym zaproponować inną, prostszą składnię do pobierania pojedynczych wierszy:

db.Peoples.SingleOrDefault(p => p.ipeople_ID == 59225) 

ten sposób otrzymasz NULL czy rekord nie istnieje. Single rzuci wyjątek, jeśli nie zostanie znaleziony żaden rekord. Chciałbym również oddzielić kod aktualizacji na kliknięcie przycisku na minimum, aktualizowanie osoby bezpośrednio na Post Back wydaje się trochę dziwne.

Też lubię małe zmienne dla zmiennych lokalnych, ale nie będę się tym zajmować.