2012-04-19 18 views
96

Próbuję zasiać bazę danych programowania przy użyciu niektórych danych testowych.Jak zaszczepić dane za pomocą AddOrUpdate za pomocą złożonego klucza w wersji EF 4.3

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

Mam inny stół, który muszę zasiać, w którym nie znałbym klucza podstawowego.

Na przykład chciałbym dodać 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 przekazuje rozwiązanie, którego szukam.

Odpowiedz

189

Spróbuj tego:

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

@LadislavMrnka co jeśli identyfikator musi być złożony typ tj 'context.People.AddOrUpdate (p => new {p.Name.FirstName, p.Name.LastName}, ludzie)'? – gabe

+3

@ LadislavMrnka, także, co, jeśli właściwość jest typu zerowego? np. 'context.People.AddOrUpdate (p => new {p.Birthdate}, people)'? – stack247

+2

Należy tu zwrócić uwagę na to, że kolekcja "ludzi" musi być ARRAYIEM, a nie listą. Jeśli masz listę podmiotów, możesz po prostu wywołać funkcję .ToArray() na liście. Walczyłem z tym :) - Dobra odpowiedź: –

0

Jeśli masz Only primitive types or enumeration types are supported in this context. powodu pomocą właściwości nawigacji - rozważyć dodanie właściwość klucza obcego bezpośrednio do podmiotu (może tylko z getter) i używać go jako Ladislav Mrnka proponowanej.