Jak wysyłać dane za pomocą AddOrUpdate ze złożonym kluczem w EF 4.3


101

Próbuję wypełnić bazę danych programistycznych z danymi testowymi.

Użyłem context.People.AddOrUpdate(p => p.Id, people));z dużym powodzeniem.

Mam inną tabelę, którą muszę zasiać, w której nie znam klucza podstawowego.

Na przykład chciałbym AddOrUpdate na podstawie dopasowania imienia i nazwiska.

Nie jestem pewien, jak poprawnie napisać wyrażenie.

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

jest oczywiście niepoprawny, ale mam nadzieję, że zapewnia rozwiązanie, którego szukam.

Odpowiedzi:


200

Spróbuj tego:

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

12
@LadislavMrnka co jeśli identyfikator musi być typem złożonym, tj. context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)?
gabe

3
@LadislavMrnka, także, co jeśli właściwość jest typem dopuszczającym wartość null? czyli context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
stack247

2
Należy tu zauważyć, że kolekcja „people” musi być tablicą, a nie listą. Jeśli masz listę encji, możesz po prostu wywołać .ToArray () na liście. Walczyłem z tym :) - Dobra odpowiedź
Dean Martin

1
nie mogę tego zmusić do pracy. prawdopodobnie dlatego, że (oprócz 3 właściwości określonych w kluczu złożonym) mam inne pole ID z numerami generowanymi automatycznie?
Sonic Soul

@LadislavMrnka musi zachować folder migracji (Configuration.cs i ...) po wykonaniu migracji i aktualizacji pól bazy danych ???
AminM

1

Jeśli otrzymałeś z Only primitive types or enumeration types are supported in this context.powodu używania właściwości nawigacji - rozważ dodanie własności klucza obcego bezpośrednio do encji (może tylko z getter) i użyj jej tak, jak zaproponował Ladislav Mrnka .


Jak dodać właściwość nawigacji innego klucza obcego tabeli w code firstpodejściu? Mam strukturę jak context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)? To możliwe
yogen darji,

Jeśli The specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
ustawię
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.