Массовая вставка с дочерними объектами с использованием расширений EF6

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

Когда используешь IncludeGraph, некоторые параметры должны быть установлены в IncludeGraphBuilder(См.: https://entityframework-extensions.net/include-graph). Следующие параметры должны быть указаны вIncludeGraphBuilder: ColumnPrimaryKeyExpression, LambdaPrimaryKeyExpression

Схема выглядит следующим образом:
Customer(PK,____,AddressId)
CustomerAddress(PK,____,AddressLookupId)
CustomerPhone(PK,___,CustomerId)
AddressCities(PK,CityName)
AddressLookup(PK,Zip,CityId, StateId)

У меня есть следующая таблица поиска
AddressStates(PK,_____)

варианты заполнения данных следующие

options.InsertIfNotExists = true;
options.IncludeGraph = true;
options.IncludeGraphOperationBuilder = operation =>
                {
                    switch (operation)
                    {
                      case BulkOperation<Customer> customer:
                            customer.InsertIfNotExists = true;
                            customer.ColumnPrimaryKeyExpression = x => new { 
                            x.FirstName, x.MiddleName, x.LastName};
                            customer.AutoMapOutputDirection = true;
                            //customer.LambdaPrimaryKeyExpression = 
                            customer.AutoMapIdentityExpression;
                            break;
                        case BulkOperation<CustomerAddress> customerAddress:
                            customerAddress.InsertIfNotExists = true;
                            customerAddress.ColumnPrimaryKeyExpression = x => 
                            new { x.Address };
                            customerAddress.AutoMapOutputDirection = true;
                            //customer.LambdaPrimaryKeyExpression = 
                            customer.AutoMapIdentityExpression;
                            break;
                        case BulkOperation<CustomerPhone> customerPhone:
                            customerPhone.InsertIfNotExists = true;
                            customerPhone.ColumnPrimaryKeyExpression = x => 
                            x.PhoneNumber;
                            //customerPhone.LambdaPrimaryKeyExpression = 
                            customerPhone.AutoMapIdentityExpression;
                            customerPhone.AutoMapOutputDirection = true;
                            break;
                        case BulkOperation<AddressCity> addressCity:
                            addressCity.InsertIfNotExists = true;
                            addressCity.ColumnPrimaryKeyExpression = x => 
                            x.City;
                            //addressCity.LambdaPrimaryKeyExpression = 
                            addressCity.AutoMapIdentityExpression;
                            addressCity.AutoMapOutputDirection = true;
                            break;
                        case BulkOperation<AddressLookup> addressLookup:
                            addressLookup.InsertIfNotExists = true;
                            addressLookup.ColumnPrimaryKeyExpression = x => 
                          new { x.Zip, x.CityId, x.StateId };
                            //addressLookup.LambdaPrimaryKeyExpression = 
                            addressLookup.AutoMapIdentityExpression;
                            addressLookup.AutoMapOutputDirection = true;
                            break;

Я также попытался настроить ColumnPrimaryKeyExpression для сопоставления столбцов, которые должны оставаться уникальными, и безуспешно.

Обновление 1: добавлены параметры клиента внутри построителя графиков, ошибка изменилась на нарушение ограничения FK для города, хотя для него установлено разрешение только на несуществующие города.

2 ответа

Мне удалось решить проблему, добавив
<EntityType>.AllowDuplicateKeys = false;
и у меня было нулевое значение ключа в некоторых записях, поэтому мне пришлось их отфильтровать

Вы не устанавливаете никаких настроек для клиента. Вероятно, в этом проблема

Другие вопросы по тегам