96

Sto provando a seminare un database di sviluppo con alcuni dati di test.Come seminare dati con AddOrUpdate con una chiave complessa in EF 4.3

Ho usato context.People.AddOrUpdate(p => p.Id, people)); con molto successo.

Ho un'altra tabella che devo seminare, in cui non conoscerei la chiave primaria.

Ad esempio, vorrei aggiungereOrUpdate in base alla corrispondenza Nome e Cognome.

Non sono sicuro di come scrivere correttamente l'espressione.

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

è ovviamente non corretto, ma spero che trasmetta la soluzione che sto cercando.

risposta

189

Prova questo:

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

@LadislavMrnka cosa succede se l'identificatore deve essere un tipo complesso vale a dire 'context.People.AddOrUpdate (p => new {p.Name.FirstName, p.Name.LastName}, persone)'? – gabe

+3

@LadislavMrnka, inoltre, cosa succede se la proprietà è di tipo nullable? Ad esempio 'context.People.AddOrUpdate (p => new {p.Birthdate}, people)'? – stack247

+2

Qualcosa da notare qui è che la raccolta "persone" deve essere un ARRAY e non una lista. Se si dispone di un elenco di entità, è possibile chiamare semplicemente .ToArray() nell'elenco. Ho faticato con quello :) - Buona risposta –

0

Se hai Only primitive types or enumeration types are supported in this context. a causa dell'utilizzo di proprietà di navigazione - considerare l'aggiunta di proprietà chiave esterna direttamente al soggetto (forse solo con getter) e usarlo come Ladislav Mrnka proposto.

Problemi correlati