2009-06-08 12 views
0

Ich verwende Linq zu SQL in meiner Datenschicht, wo ich eine "Einstellungen" -Tabelle der regulären asp_user Tabelle hinzugefügt haben. In dieser Einstellungstabelle behalte ich mehrere Datensätze, welche die bevorzugte Einheit ist (ein Fremdschlüssel für die Units-Tabelle).Linq zu Sql Update erstellt doppelten Datensatz

Jetzt, wenn diese bevorzugte Einheit geändert werden muss (sagen wir von Liter zu Kilogramm), rufe ich meinen UnitService an, um die richtige Einheitsinstanz zu erhalten und setze meine Einstellung .PreferedUnit auf diese Instanz. Dies erstellt ein neues (doppeltes) Element in der Datenbank (in meiner Units-Tabelle befinden sich jetzt zwei Kilogramm Datensätze). Das ist natürlich nicht das, was ich beabsichtigt habe.

Ich habe das Gefühl, dass ich ein paar grundlegende Dinge falsch mache

UserSetting setting = AccountService.GetUserSetting(user.Identity.Name); 
if (setting.PreferedUnitId != unitId) 
    setting.Unit = UnitService.GetUnitById(unitId); 
AccountService.SaveuserSetting(setting); 

Antwort

1

Sie müssen wahrscheinlich einen DataContext.Units ausführen. Attach (Einheit), um Linq an SQL wissen zu lassen, dass Ihr Einheitenobjekt bereits existiert und nicht eingefügt werden muss. Beachten Sie, dass ich davon ausgehe, dass Ihre Units-Tabelle als eine Units-Eigenschaft im DataContext verfügbar gemacht wird.

Ich spekuliere hier, aber es scheint, dass Ihr AccountService einen anderen DataContext zu Ihrem UnitService verwendet, so dass Sie sich tatsächlich im Szenario der getrennten Objekte befinden. Diese blog post könnte die Dinge ein wenig klarer machen

+0

Ja, du hast Recht. Das wird es wahrscheinlich reparieren. –

1

Was bedeutet AccountService.SaveuserSetting tun? Es macht wahrscheinlich eine unnötige InsertOnSubmit.

+0

Ja, ist das implizit? Was passiert also, wenn ich beschließe, dass meine Änderungen rückgängig gemacht werden und ich mich nicht verpflichten sollte? –