2009-01-02 4 views
6

Ich verwende LINQ to SQL, um meine Datenbank zu aktualisieren. Ich füge eine Menge Datensätze ein, und wenn ich SubmitChanges() aufrufe, führt LINQ to SQL für jedes Objekt eine Insert- und eine Select-Anweisung aus. Es ist mir nicht wichtig, meine Objekte zu aktualisieren, nachdem sie in die Datenbank eingefügt wurden.Beenden von LINQ to SQL durch Ausführen von SELECT-Anweisungen nach dem Einfügen

Wissen Sie, dass ich verhindern kann, dass LINQ to SQL die SELECT-Anweisungen nach den INSERT-Anweisungen ausgibt? Dies sollte meine App viel schneller machen.

Antwort

0

Ich kann die Einstellung jetzt nicht abrufen, aber im Designer, auf den Eigenschaften einer Spalte, haben Sie einige 'Refresh' Einstellung (en).

6

Sie suchen nach ColumnAttribute.AutoSync. Wenn Sie den Designer verwenden, überprüfen Sie jede Spalte auf eine Auto-Sync-Eigenschaft und setzen Sie sie auf Nie.

Bearbeiten: Ok, das hat nicht für Sie funktioniert. Mach dich bereit für eine Mapping-Hackerei!

Als ich mit einigen automatisch generierten Primärschlüsselspalte einlegen, erhalte ich diese SQL:

INSERT INTO [dbo].[TableName](fieldlist) 
VALUES (@p0, @p1, @p2, @p3, @p4) 

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value] 

Wie ich Ihre Anfrage zu verstehen, Sie wollen nicht, dass SELECT

Versuch 1: ich das ging Primärschlüsselfeld und legen Sie auto-generated auf false fest. Dies verursachte eine Sql-Ausnahme "Kann keinen expliziten Wert für die Identitätsspalte in der Tabelle 'TableName' einfügen, wenn IDENTITY_INSERT auf OFF gesetzt ist." Mit anderen Worten, linq hat einen Wert für diese Spalte angegeben.

Versuch 2: Ich löschte die automatisch generierten Spalten vom Designer. Dies führte dazu, dass Linq mir eine ungültige Vorgangsausnahme gab: "Ausführen, Aktualisieren oder Löschen von Operationen an 'Tabelle (Tabellenname)' kann nicht ausgeführt werden, da sie keinen Primärschlüssel hat."

Versuch 3: Ich löschte die automatisch generierten Spalten vom Designer, dann markierte ich eine andere Spalte als Primärschlüssel. Obwohl diese Spalte kein Primärschlüssel in der Datenbank ist, wird sie von LINQ DataContext zum Verfolgen der Zeilenidentität verwendet. Es muss für beobachtete Datensätze eines bestimmten DataContext eindeutig sein.

Dieser dritte Versuch erzeugt die folgende SQL (das ist, was für Sie fragen)

INSERT INTO [dbo].[TableName](fieldlist) 
VALUES (@p0, @p1, @p2, @p3, @p4) 
+0

Danke für den Vorschlag. Ich habe das gemacht, aber der Profiler zeigt immer noch eine Auswahl nach Einfügungen und Aktualisierungen. Ich weiß nicht warum. –

+0

Ich habe zwei Spalten, die markiert sind AutoGeneratedValue auf True festgelegt. Die select-Anweisung wählt diese beiden Spalten nach Einfügungen und Aktualisierungen aus, obwohl AutoSync auf false gesetzt ist. –

+2

Das scheint eine lächerliche Menge an Arbeit für etwas zu tun, das beim ersten Einsatz von ADO.Net – Jasmine

0

Ich hatte dieses Problem mit einem einmal Projekt. Ich habe einfach den context.ExecuteCommand ({sql string here.}) Verwendet. Dies war für einen Einsatz, der Leistungsprobleme verursachte. Einfachste Reparatur, einfach zu sehen und zu warten, anstatt das Modell meiner Meinung nach zu durchforsten.