2009-04-29 5 views
1

Beim Erstellen einer neuen ASP.NET MVC-Anwendung habe ich ein Problem mit der Methode, die ich verwende, um von Benutzern erstellte Daten für temporäre Benutzer zu speichern, die noch kein Konto erstellt haben was ich dann versuche, zu einem echten Benutzer zu konvertieren. Das wahrscheinlich machen nicht viel Sinn, so lassen Sie mich erklären:LINQ to SQL - Konvertieren von temporären Benutzern in echte Benutzer

  • Ein Besucher der Website-Profileinstellungen eingeben können, bevor sie mit einem Benutzernamen, Passwort, usw.
  • Datenbank Ich schaffe registrieren gemacht wird Einträge über LINQ to SQL für einen neuen Benutzer in diesem Fall, wobei der Wert von Request.AnonymousID als temporärer Benutzername verwendet wird.
  • Wenn der Benutzer sich für die Registrierung entscheidet, muss ich die relevanten Datenbankeinträge wechseln, um den neu eingegebenen Benutzernamen anstelle des temporären zu verwenden.

Das Problem ist, dass, wenn ich versuche, den Datensatz zu aktualisieren ich kann nicht, weil der Benutzername der Primärschlüssel ist, so bin ich gezwungen, den Datensatz zu löschen und eine neue hinzufügen ...

Ich kann wahrscheinlich damit durchhalten, aber ich denke, ich könnte das völlig falsch machen und mich fragen, ob jemand einen besseren Weg vorschlagen könnte, um Besuchern zu erlauben, Informationen zu speichern, bevor sie sich registriert haben, und diese dann weitertragen .

Ich weiß über Profile, möchte aber, dass die Profilinformationen für andere Besucher verfügbar sind. Ich weiß auch, dass ich ein anonymes Profil erstellen kann, aber es scheint, dass ich in der Lage sein sollte, das Datenmodell aus der Datei web.config zu behalten.

+0

ich ziemlich überrascht bin du Der Primärschlüssel kann nicht aktualisiert werden, solange er nicht mit anderen Daten in der Tabelle kollidiert. Welchen Fehler/welche Ausnahme sehen Sie? – tomfanning

+0

Vielleicht ist es das nicht. Ich habe gerade nicht den Fehler vor mir, aber ich weiß, dass wenn ich versuchte, + add stattdessen zu löschen, ich einen Fehler "kann nicht an Entität anhängen, die bereits existiert". Ich habe ein Feld, das eine Identität ist und so kann es sein, dass ich ein Problem habe, einen neuen Wert für dieses Feld zu generieren. Ich habe auch eine FK-Beziehung zwischen dem Benutzernamen in den zwei Tabellen, die ich ändern möchte. – curlyfries

+0

Also ... ähm ... ja. Vielleicht ist der Fremdschlüssel das Problem und ich sollte es einfach entfernen. – curlyfries

Antwort

1

Ich würde vorschlagen, einen unabhängigen Primärschlüssel für die Tabelle mit Ihren benutzerdefinierten Benutzerdaten zu haben. Und dann Felder wie RefAnonymousId und RefUserId haben, um diese Benutzerdaten mit dem anonymen Benutzer bzw. dem registrierten Benutzer in Beziehung zu setzen.

Zum Beispiel:

 
TABLE UserData 
(
    UserDataID int IDENTITY(1,1) PRIMARY KEY, 
    RefAnonymousId uniqueidentifier, 
    RefUserId uniqueidentifier, 
    ... (data fields), 
    (maybe also unique keys on RefUserId and RefAnonymousId) 
) 

diese Weise werden Sie auch in der Lage sein, den Benutzer zu identifizieren, wenn der Benutzer angemeldet ist und vielleicht die Benutzer automatisch einloggen ...

+0

Oh, das gefällt mir. Ich werde es versuchen und zu dir zurückkommen. – curlyfries

+0

Arbeitete wie ein Charme - danke! – curlyfries