Sql server 在同一事务中添加和删除Linq到Sql
我有一个更新主详细记录的操作方法。当数据第一次从视图到达控制器时,我从数据库中选择以前的记录并调用存储库的delete方法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)
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();
}