Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在同一事务中添加和删除Linq到Sql_Sql Server_Asp.net Mvc_Linq_Linq To Sql_Transactions - Fatal编程技术网

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

Sql server 在同一事务中添加和删除Linq到Sql,sql-server,asp.net-mvc,linq,linq-to-sql,transactions,Sql Server,Asp.net Mvc,Linq,Linq To Sql,Transactions,我有一个更新主详细记录的操作方法。当数据第一次从视图到达控制器时,我从数据库中选择以前的记录并调用存储库的delete方法 public ActionResult sale(int id, SaleRecord _SaleRecord,int? PositionID) { SalesRepository _SalesRepository = new SalesRepository(); if (ModelState.IsValid)

我有一个更新主详细记录的操作方法。当数据第一次从视图到达控制器时,我从数据库中选择以前的记录并调用存储库的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);
                }
-----
-----
}

但当调用save时,它会给我一个异常,告诉我数据库中违反了unique key约束。违反此约束的原因是未从数据库中删除前一条记录,它只是想在其上添加另一条记录。我如何解决这个问题呢?为什么不调用
\u SalesRepository.Save()添加新记录之前

更新:

但与其删除和添加,不如进行更新。 只要获取记录并使用try-catch更新它们,然后如果一切正常,就保存


希望这有帮助

不会破坏交易完整性。假设我们在添加记录之前先保存,在添加记录时发现异常,我们在db级别是否处于不一致状态?那么您应该使用Update而不是delete and add。只需获取记录并使用
尝试catch
更新所有记录,然后如果一切正常,请保存。希望这有帮助:)实际上,要更新的记录是主详细信息,详细信息部分用户可以添加一些新记录、删除旧记录或同时执行这两项操作。因此,在这种情况下,我认为在删除后添加记录比检查旧记录更有意义
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();
}