0

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

Person table - 
     PersonID 
     Name (unique index). 
Orders table - 
     OrderID 
     Price 
     Item 
     PersonID (FK)   

Я хочу, чтобы сделать вставку в таблицу заказов (с использованием EF), который будет вставьте список заказов (все с одним и тем же лицом, и я знаю только имя человека), я хочу, чтобы, если человек не существует в таблице персонажа, он будет вставлен в него, и он действительно существует, заказ будет заполнен правильный человек. Я не хочу сначала запрашивать, находится ли человек в таблице персонажа, потому что его избыточный вызов. Есть ли возможность добавить его только во время сохранения изменений и запросить сервер перед началом работы? что-то вроде этого:

Person thePerson = new Person {Name = "knownName"}; 
foreach (var order in orders) 
{ 
    context.Orders.AddObject(new Order 
    { 
     Price = order.Price, 
     Item = order.ItemName, 
     Person = thePerson 
    }); 
} 
context.SaveChanges(); 
+2

Я не вижу, как. Могу ли я спросить, почему вы рассматриваете запрос пользователя на избыточный вызов? –

+0

, потому что это может случиться много в моей БД (код, который я написал, является упрощенной версией ...) - так это может привести меня к поездке туда и обратно в БД много раз, а не просто делать это один раз. – Clueless

ответ

0

Вместо создания объекта Person с атрибутом Name, если вы используете атрибут PersonId, EF делает то, что вы хотите. Но это поведение ограничено первичными ключами, поэтому я не думаю, что можно использовать имя для достижения этого.

Person thePerson = new Person {PersonID = Id}; // Id is either previously fetched or a newly created one 
foreach (var order in orders) 
{ 
    context.Orders.AddObject(new Order 
    { 
     Price = order.Price, 
     Item = order.ItemName, 
     Person = thePerson 
    }); 
} 
context.SaveChanges(); 
+0

Это то, чего я хотел избежать (выбор ID ...). – Clueless

+0

Кажется странным; как вы знаете имя человека; Бьюсь об заклад, вы извлекаете его из базы данных; а затем не получить идентификатор? – daryal

+0

@ daryal, не могли бы вы предоставить более подробную информацию о том, как это сделать? Я получаю 'DbEntryValidationException' ... – edobry

Смежные вопросы