2012-04-19 14 views
96

Estoy intentando sembrar una base de datos de desarrollo con algunos datos de prueba.Cómo inicializar datos con AddOrUpdate con una clave compleja en EF 4.3

He usado context.People.AddOrUpdate(p => p.Id, people)); con mucho éxito.

Tengo otra tabla que necesito sembrar, en la que no sabría la clave principal.

Por ejemplo, me gustaría AddOrUpdate en función de la coincidencia de nombres y apellidos.

No estoy seguro de cómo escribir la Expresión correctamente.

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

es obviamente incorrecto, pero espero que transmita la solución que estoy buscando.

Respuesta

189

Prueba esto:

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

@LadislavMrnka ¿y si el identificador tiene que ser un tipo complejo, es decir 'context.People.AddOrUpdate (p => nueva {p.Name.FirstName, p.Name.LastName}, personas)'? – gabe

+3

@LadislavMrnka, también, ¿qué pasa si la propiedad es un tipo anulable? es decir 'context.People.AddOrUpdate (p => new {p.Birthdate}, personas)'? – stack247

+2

Algo a tener en cuenta aquí es que la colección 'personas' debe ser un ARRAY y no una lista. Si tiene una lista de entidades, simplemente puede llamar a .ToArray() en la lista. Luché con eso :) - Buena respuesta –

0

Si tienes Only primitive types or enumeration types are supported in this context. debido al uso de propiedad de navegación - considerar la adición de propiedad de clave externa directamente a la entidad (tal vez únicamente con captador) y utilizarlo como Ladislav Mrnka propuesto.

Cuestiones relacionadas