Dela via


Ansvarsområden för utvecklaren vid åsidosättande av standardbeteende

LINQ till SQL framtvingar inte följande krav, men beteendet är odefinierat om dessa krav inte uppfylls.

  • Den övergripande metoden får inte anropa SubmitChanges eller Attach. LINQ till SQL genererar ett undantag om dessa metoder anropas i en åsidosättningsmetod.

  • Åsidosättningsmetoder kan inte användas för att starta, checka in eller stoppa en transaktion. Åtgärden SubmitChanges utförs under en transaktion. En inre kapslad transaktion kan störa den yttre transaktionen. Metoder för åsidosättning av belastning kan bara starta en transaktion när de har fastställt att åtgärden inte utförs i en Transaction.

  • Åsidosättningsmetoder förväntas följa den tillämpliga optimistiska samtidighetsmappningen. Åsidosättningsmetoden förväntas utlösa en ChangeConflictException när en optimistisk samtidighetskonflikt inträffar. LINQ till SQL fångar upp det här undantaget så att du kan bearbeta det SubmitChanges alternativ som anges på SubmitChanges.

  • Metoderna Skapa (Insert) och Update åsidosätt förväntas flöda tillbaka värdena för databasgenererade kolumner till motsvarande objektmedlemmar när åtgärden har slutförts.

    Om Order.OrderID till exempel mappas till en identitetskolumn (primär nyckel för automatisk inkrement ) InsertOrder() måste åsidosättningsmetoden hämta det databasgenererade ID:t och ange Order.OrderID medlemmen till det ID:t. På samma sätt måste tidsstämpelmedlemmar uppdateras till de databasgenererade tidsstämpelvärdena för att säkerställa att de uppdaterade objekten är konsekventa. Om det inte går att sprida de databasgenererade värdena kan det orsaka inkonsekvens mellan databasen och de objekt som spåras av DataContext.

  • Det är användarens ansvar att anropa rätt dynamiskt API. I metoden för åsidosättning av uppdatering kan till exempel endast ExecuteDynamicUpdate anropas. LINQ till SQL identifierar eller verifierar inte om den anropade dynamiska metoden matchar den tillämpliga åtgärden. Om en inapplicerbar metod anropas (till exempel ExecuteDynamicDelete för att ett objekt ska uppdateras) är resultatet odefinierat.

  • Slutligen förväntas den övergripande metoden utföra den angivna åtgärden. Semantiken för LINQ till SQL-åtgärder som ivrig inläsning, uppskjuten inläsning och SubmitChanges) kräver åsidosättningarna för att tillhandahålla den angivna tjänsten. En belastningssidosättning som bara returnerar en tom samling utan att kontrollera innehållet i databasen leder sannolikt till inkonsekventa data.

Se även