Linq to Sql在同一事务中添加和删除

时间:2011-03-31 12:10:50

标签: sql-server asp.net-mvc linq linq-to-sql transactions

我有一个更新主详细记录的动作方法。当数据首次从视图到达控制器时,我从db中选择以前的记录并调用存储库的delete方法。

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 个答案:

答案 0 :(得分:2)

那么为什么在添加新记录之前不要调用_SalesRepository.Save();

更新

但最好不要删除和添加更新。 只需获取记录并使用try catch更新它们,然后如果一切正常就可以保存。

希望这有帮助