Удалить объект: не удалось подключить объект типа 'X', поскольку другой объект того же типа уже имеет такое же значение первичного ключа - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь реализовать шаблон проектирования Единица работы с репозиторием / сервисом.

У меня есть:

UnitOfWork

ShoppinglistController

ShoppinglistService

IShoppinglistRepository (который наследуется от IRepository)

ShoppinglistRepostiry (который наследуется от репозитория)

Теперь я пытаюсьудалить список товаров.

ShoppinglistController:

_service.RemoveRange(products);

_service.Remove(shoppinglistInDb);

_service.Complete();

ShoppinglistService:

public void Remove(Shoppinglist shoppinglist)
{
    _unitOfWork.Shoppinglists.Attach(shoppinglist);
    _unitOfWork.Shoppinglists.Remove(shoppinglist);
}
public void RemoveRange(IEnumerable<Product> products)
{
    _unitOfWork.Products.AttachRange(products);
    _unitOfWork.Products.RemoveRange(products);
}
public void Complete()
{
    _unitOfWork.Complete();
}

Репозиторий:

public void Remove(TEntity entity)
{
    _context.Set<TEntity>().Remove(entity);
}
public void RemoveRange(IEnumerable<TEntity> entities)
{
    _context.Set<TEntity>().RemoveRange(entities);
}
public void AttachRange(IEnumerable<TEntity> entities)
{
    foreach (var entity in entities)
    {
        _context.Set<TEntity>().Attach(entity);
    }
}

UnitOfWork

public int Complete()
{
    return _context.SaveChanges();
}

При выполнении этого я получаю следующее сообщение об ошибке:

System.InvalidOperationException: 'Присоединение объекта типа' MyApp.Models.Product 'завершилось неудачно, поскольку другой объект того же типа уже имеет такое же значение первичного ключа.Это может произойти при использовании метода «Присоединить» или установке состояния объекта на «Неизменено» или «Изменено», если какие-либо объекты в графе имеют конфликтующие значения ключей.Это может быть потому, что некоторые объекты являются новыми и еще не получили сгенерированные базой данных значения ключей.В этом случае используйте метод «Добавить» или состояние добавленной сущности для отслеживания графика, а затем установите состояние не новых сущностей на «Неизмененные» или «Измененные» в зависимости от ситуации. '

Чего мне не хватает?

1 Ответ

0 голосов
/ 11 октября 2018

Очевидно, мне пришлось установить список товаров на ноль.

_service.RemoveRange(products);

shoppinglistInDb.Products = null;

_service.Remove(shoppinglistInDb);

_service.Complete();

Теперь это работает.

...