2012-04-19 15 views
96

initiieren Ich versuche, eine Entwicklungsdatenbank mit einigen Testdaten zu erstellen.Wie Sie Daten mit AddOrUpdate mit einem komplexen Schlüssel in EF 4.3

Ich habe context.People.AddOrUpdate(p => p.Id, people)); mit viel Erfolg verwendet.

Ich habe eine andere Tabelle, die ich säen muss, in der ich den Primärschlüssel nicht kennen würde.

Zum Beispiel möchte ich AddOrUpdate basierend auf den ersten und Nachnamen passend sein.

Ich bin mir nicht sicher, wie man den Ausdruck korrekt schreibt.

context.People.AddOrUpdate(p => p.FirstName && p.LastName, people); 

ist offensichtlich falsch, aber ich hoffe, es vermittelt die Lösung, die ich suche.

Antwort

189

Versuchen Sie folgendes:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people); 
+10

@LadislavMrnka was ist, wenn die Kennung ein komplexer Typ sein muss, das heißt 'context.People.AddOrUpdate (p => new {p.Name.FirstName, p.Name.LastName}, Menschen)'? – gabe

+3

@LadislavMrnka, was ist, wenn die Eigenschaft ein NULL-fähiger Typ ist? d. h. 'context.People.AddOrUpdate (p => neu {p.Birthdate}, Leute)'? – stack247

+2

Etwas zu beachten ist, dass die "People" -Sammlung ein ARRAY und keine Liste sein muss. Wenn Sie eine Liste von Entitäten haben, können Sie einfach .ToArray() in der Liste aufrufen. Ich habe damit gekämpft :) - Gute Antwort –

0

Wenn Sie Only primitive types or enumeration types are supported in this context. bekam wegen Navigationseigenschaft mit - prüfen, direkt an das Unternehmen Fremdschlüsseleigenschaft Hinzufügen (vielleicht nur mit Getter) und verwenden Sie es als Ladislav Mrnka vorgeschlagen.