Comment amorcer des données avec AddOrUpdate avec une clé complexe dans EF 4.3


101

J'essaie de semer une base de données de développement avec des données de test.

Je l'ai utilisé context.People.AddOrUpdate(p => p.Id, people));avec beaucoup de succès.

J'ai une autre table que je dois amorcer, dans laquelle je ne connais pas la clé primaire.

Par exemple, je voudrais AddOrUpdate basé sur le prénom et le nom correspondant.

Je ne sais pas comment écrire correctement l'expression.

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

est évidemment incorrect, mais j'espère qu'il transmet la solution que je recherche.

Réponses:


200

Essaye ça:

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

12
@LadislavMrnka et si l'identifiant doit être un type complexe, c'est context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)-à- dire ?
gabe le

3
@LadislavMrnka, aussi, que se passe-t-il si la propriété est un type Nullable? c'est à dire context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
stack247

2
Il convient de noter ici que la collection «personnes» doit être un ARRAY et non une liste. Si vous avez une liste d'entités, vous pouvez simplement appeler .ToArray () sur la liste. J'ai eu du mal avec celui-là :) - Bonne réponse
Dean Martin

1
ne peut pas faire fonctionner cela. peut-être parce que (en plus de 3 propriétés spécifiées dans la clé composite) j'ai un autre champ ID avec des numéros générés automatiquement?
Sonic Soul

@LadislavMrnka doit conserver le dossier de migration (Configuration.cs et ...) après la migration et la mise à jour des champs de base de données ???
AminM

1

Si vous avez obtenu une Only primitive types or enumeration types are supported in this context.propriété de navigation, envisagez d'ajouter une propriété de clé étrangère directement à l'entité (peut-être uniquement avec getter) et utilisez-la comme Ladislav Mrnka l'a proposé.


Comment ajouter la propriété de navigation d'une autre clé étrangère de table dans l' code firstapproche? J'ai une structure comme context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)? C'est possible
yogen darji

Si je définis l'erreur de propriété getter estThe specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
yogen darji
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.