96

Я пытаюсь засеять базу данных разработки некоторыми тестовыми данными.Как загрузить данные с помощью AddOrUpdate с помощью сложного ключа в EF 4.3

Я использовал context.People.AddOrUpdate(p => p.Id, people)); с большим успехом.

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

Например, я бы хотел добавить AddOrUpdate на основе соответствия First и Last names.

Я не уверен, как правильно писать выражение.

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

, очевидно, неверно, но я надеюсь, что оно передает решение, которое я ищу.

ответ

189

Попробуйте это:

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

@LadislavMrnka, что если идентификатор должен быть сложным типом т.е. 'context.People.AddOrUpdate (р => {новый p.Name.FirstName, p.Name.LastName}, люди)'? – gabe

+3

@LadislavMrnka, также, что, если свойство является нулевым типом? то есть 'context.People.AddOrUpdate (p => new {p.Birthdate}, people)'? – stack247

+2

Что-то примечание здесь состоит в том, что коллекция людей должна быть ARRAY, а не списком. Если у вас есть список объектов, вы можете просто вызвать .ToArray() в списке. Я боролся с этим :) - Хороший ответ –

0

Если вы получили Only primitive types or enumeration types are supported in this context. из-за использование свойства навигации - рассмотреть добавление внешнего ключа свойства непосредственно к объекту (возможно только с геттером) и использовать его в качестве Ладислава Mrnka предложил.