LINQ to SQL CompiledQuery.Compile () met Update, verwijderen, invoegen?

stemmen
6

Allemaal,

Dus ik heb al mijn select queries in LINQ to SQL omgezet in gebruik CompiledQueries om dingen te versnellen. Werkt prima tot nu toe voor een select aantal uitspraken, maar ik heb niet in staat om erachter te komen hoe je een pre-compileren invoegen, bijwerken, of uitspraken te verwijderen zijn.

Toegegeven, als je invoegen, verwijderen of bijwerken in LINQ to SQL, moet je het object model te gebruiken. Maar het is duidelijk ergens langs de weg die het genereert een query, dat zou leuk zijn om pre-compileren en op te slaan in een statisch lid.

Is dit mogelijk? Wat is LINQ prestaties als voor updates, schrapt en inserts wanneer het niet pre-gecompileerde? Ik kon zien dat het een stuk sneller dan de selecteert, want wat ze eronder doen is een stuk eenvoudiger en minder dynamisch ...

De vraag is gesteld op 09/12/2008 om 22:08
bron van user
In andere talen...                            


3 antwoorden

stemmen
8

Er is een groot verschil. LINQ to SQL select-query's kunnen grote complexe expressies bomen. Het is deze dat ergens kan nemen 'compileren'. In dit geval is het samenvoegen om een ​​aantal T-SQL die tegen een SQL Server kan worden uitgevoerd. Dus is het zinvol om het resultaat van een operatie in de cache zodat het kan worden hergebruikt.

Echter andere Verwijderen, Update en Insert zijn eenvoudige handelingen die niet nodig een expressie boom te worden omgezet in T-SQL (LINQ zelf is alles over het opvragen). Het is gewoon jammer dat we zijn getraind om te denken van SQL-code die op de andere handelingen als 'queries', we zijn niet actuall daarvoor enige info uitvoert.

Deze operaties zijn alleen gedefinieerd door de DataContext niet door LINQ vandaar de code om deze functies is reeds gecompileerd uit te voeren.

antwoordde op 09/12/2008 om 22:46
bron van user

stemmen
3

Ik denk dat van de drie enige insert zou logisch zijn om te kunnen verzamelen en hergebruiken, omdat delete is triviaal eenvoudige (DELETE FROM tabel WHERE Key ...) en UPDATE alleen werkt de velden die zijn veranderd en dus varieert per bijwerken.

[) Amien

antwoordde op 10/12/2008 om 07:03
bron van user

stemmen
0

L2S gebruikt "sp_executesql", dus nadat u het uit te voeren de eerste keer zal het in de opgeslagen procedure uitvoeringsplan cache. Daaropvolgende runs (van dezelfde vraag - niet hetzelfde params) zal de gecompileerde plannen uit de cache hergebruiken. Dus wat u vraagt ​​is automagisch behandeld door SQL Server 'achter de schermen'.

antwoordde op 10/12/2008 om 12:43
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more