Sdílet prostřednictvím


Odpovědnosti vývojáře při přepisu výchozího chování

LINQ to SQL nevynucuje následující požadavky, ale chování není definováno, pokud tyto požadavky nejsou splněny.

  • Metoda přepsání nesmí volat SubmitChanges nebo Attach. LINQ to SQL vyvolá výjimku, pokud jsou tyto metody volány v metodě přepsání.

  • Metody přepsání nelze použít ke spuštění, potvrzení nebo zastavení transakce. Operace SubmitChanges se provádí v rámci transakce. Vnitřní vnořená transakce může kolidovat s vnější transakcí. Metody přepsání zatížení mohou spustit transakci až poté, co zjistí, že operace není provedena v objektu Transaction.

  • Očekává se, že metody přepsání budou dodržovat příslušné mapování optimistické souběžnosti. Očekává se, že metoda přepsání vyvolá ChangeConflictException , když dojde ke konfliktu optimistické souběžnosti. LINQ to SQL tuto výjimku zachytí, abyste mohli správně zpracovat SubmitChanges možnost uvedenou na SubmitChanges.

  • Očekává se, že metody vytvoření (Insert) a Update přepsání vrátí hodnoty sloupců generovaných databází do odpovídajících členů objektu po úspěšném dokončení operace.

    Pokud Order.OrderID je například namapován na sloupec identity (automatické zvýšení primárního klíče), InsertOrder() musí metoda přepsání načíst ID vygenerované databází a nastavit Order.OrderID člena na toto ID. Podobně musí být členy časového razítka aktualizovány na hodnoty časového razítka generovaného databází, aby se zajistilo, že aktualizované objekty jsou konzistentní. Při šíření hodnot generovaných databází může dojít k nekonzistence mezi databází a objekty sledovanými objekty DataContext.

  • Uživatel zodpovídá za vyvolání správného dynamického rozhraní API. Například v metodě přepsání aktualizace lze volat pouze ExecuteDynamicUpdate . LINQ to SQL nerozpozná nebo ověří, jestli vyvolaná dynamická metoda odpovídá příslušné operaci. Pokud je volána metoda inapplicable (například ExecuteDynamicDelete pro objekt, který se má aktualizovat), výsledky nejsou definovány.

  • Nakonec se očekává, že metoda přepsání provede uvedenou operaci. Sémantika operací LINQ to SQL, jako je například dychtivé načítání, odložené načítání a SubmitChanges) vyžadují přepsání pro poskytování stavové služby. Například přepsání zatížení, které pouze vrátí prázdnou kolekci bez kontroly obsahu v databázi, pravděpodobně povede k nekonzistentním datům.

Viz také