Linq to Sql Добавить и удалить в той же транзакции - PullRequest
1 голос
/ 31 марта 2011

У меня есть метод действия для обновления основной записи. когда данные впервые достигают представления от контроллера, я выбираю предыдущие записи из базы данных и вызываю метод удаления хранилища.

public ActionResult sale(int id, SaleRecord _SaleRecord,int? PositionID)
        {
            SalesRepository _SalesRepository = new SalesRepository();
            if (ModelState.IsValid)
            {
                List<long> prevSaleIDs = _SaleRecord.Items.Where(y => y.ActualSaleID > 0).Select(x => x.ActualSaleID).Distinct().ToList();
                foreach (var SaleID in prevSaleIDs) 
                {
                    var dbData = _SalesRepository.GetSale(SaleID);
                    _SalesRepository.DeleteSaleItems(dbData.mktActualSaleItems.ToList());
                    _SalesRepository.DeleteActualSales(dbData);
                }
-----
-----
}

после помещения записей для удаления я готовлю новую запись, вызывая updateModel и помещая ее для вставки

public ActionResult sale(int id, SaleRecord _SaleRecord, int? PositionID)
{
   //as above 
   mktActualSale _Sales = new mktActualSale();
                UpdateModel(_Sales, "_SaleRecord");
                _Sales.mktActualSaleItems.AddRange(_SaleRecord.Items.Where(z => z.SalesQuantity != 0).Select(x => new mktActualSaleItem { SalesQuantity = x.SalesQuantity, SKUID = x.SKUID }));
                _SalesRepository.Add(_Sales);
                _SalesRepository.Save();
}

но когда вызывается save, я получаю исключение, сообщающее, что ограничение уникального ключа нарушено в db. Причиной нарушения этого ограничения является то, что предыдущая запись не удаляется из базы данных, а просто хочет добавить еще одну запись поверх нее. Как я могу решить эту проблему
С уважением

1 Ответ

2 голосов
/ 31 марта 2011

Так почему бы не позвонить _SalesRepository.Save();, прежде чем добавлять новые записи ??

Обновление:

Но не лучшесделать обновление вместо удаления и добавления.Просто получите записи и обновите их, используя try catch, и, если все в порядке, сохраните.

Надеюсь, это помогло

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...