Массовая вставка с дочерними объектами с использованием расширений EF6 - PullRequest
1 голос
/ 28 мая 2020

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

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

Схема выглядит следующим образом Клиент (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 ]

1 голос
/ 28 мая 2020

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

1 голос
/ 28 мая 2020

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

...