So setzen Sie Daten mit AddOrUpdate mit einem komplexen Schlüssel in EF 4.3

101

Ich versuche, eine Entwicklungsdatenbank mit einigen Testdaten zu erstellen.

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 dem übereinstimmenden Vor- und Nachnamen hinzufügen.

Ich bin mir nicht sicher, wie ich den Ausdruck richtig schreiben soll.

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

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

Keith Sirmons
quelle

Antworten:

200

Versuche dies:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people);
Ladislav Mrnka
quelle
12
@LadislavMrnka was ist, wenn der Bezeichner ein komplexer Typ sein muss, dh context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)?
gabe
3
@LadislavMrnka, was ist, wenn die Eigenschaft ein nullbarer Typ ist? dh context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
stack247
2
Hierbei ist zu beachten, 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 kämpfte mit diesem :) - Gute Antwort
Dean Martin
1
kann das nicht zum Laufen bringen. möglicherweise, weil ich (zusätzlich zu 3 im zusammengesetzten Schlüssel angegebenen Eigenschaften) ein anderes ID-Feld mit automatisch generierten Zahlen habe?
Sonic Soul
@LadislavMrnka muss den Migrationsordner (Configuration.cs und ...) behalten, nachdem die Datenbankfelder migriert und aktualisiert wurden ???
AminM
1

Wenn Sie Only primitive types or enumeration types are supported in this context.aufgrund der Verwendung der Navigationseigenschaft eine Fremdschlüsseleigenschaft direkt zur Entität hinzufügen möchten (möglicherweise nur mit Getter) und diese wie von Ladislav Mrnka vorgeschlagen verwenden.

lukyer
quelle
Wie füge ich die Navigationseigenschaft eines anderen Tabellen-Fremdschlüssels hinzu code first? Ich habe Struktur wie context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)? Es ist möglich
Yogen Darji
Wenn ich Getter Eigenschaft Fehler setzen istThe specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Yogen Darji