Я получаю сообщение об ошибке каждый раз, когда пытаюсь выполнить массовую вставку с использованием библиотеки расширений 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 для города, хотя для него задано разрешение только на несуществующие города.