Як вивести дані за допомогою AddOrUpdate за допомогою складного ключа в EF 4.3


101

Я намагаюся створити базу даних розробок з деякими тестовими даними.

Я користувався context.People.AddOrUpdate(p => p.Id, people));з великим успіхом.

У мене є ще одна таблиця, яку мені потрібно посіяти, в якій я б не знав первинного ключа.

Наприклад, я хотів би AddOrUpdate на основі відповідності Імені та Прізвища.

Я не впевнений, як правильно написати вираз.

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

очевидно, невірно, але я сподіваюся, що він передає шукане рішення.

Відповіді:


200

Спробуйте це:

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

12
@LadislavMrnka, що якщо ідентифікатор повинен бути складного типу, тобто context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)?
gabe

3
@LadislavMrnka, також, що робити, якщо властивість є нульовим типом? тобто context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
stack247

2
Щось тут слід зазначити, що колекція «людей» повинна бути АРЕЙ, а не списком. Якщо у вас є список об'єктів, ви можете просто зателефонувати .ToArray () у список. Я боровся з цим :) - Гарна відповідь
Дін Мартін

1
не може змусити це працювати. можливо тому, що (крім 3 властивостей, зазначених у складеному ключі) у мене є ще одне поле ідентифікатора з автоматично згенерованими номерами?
Sonic Soul

@LadislavMrnka потрібно зберігати папку Migration (Configuration.cs та ...) після міграції та оновлення полів бази даних ???
AminM

1

Якщо ви отримали Only primitive types or enumeration types are supported in this context.через користування навігаційною властивістю, розгляньте можливість додавання власності іноземного ключа безпосередньо до об'єкта (можливо, лише за допомогою getter) та використовуйте його так, як запропонував Ладіслав Мрнка .


Як додати у code firstпідході властивість навігації іншого стороннього ключа в підході? У мене така структура, як context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)? Це можливо
yogen darji

Якщо я встановив помилку властивості getter, цеThe specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
yogen darji
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.