【问题标题】:Linq to Sql Add and Delete in same transactionLinq to Sql 在同一事务中添加和删除
【发布时间】:2011-03-31 12:10:50
【问题描述】:

我有一个更新主从记录的操作方法。当数据第一次从视图到达控制器时,我从数据库中选择以前的记录并调用存储库的删除方法。

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 中违反了唯一键约束。违反此约束的原因是先前的记录未从数据库中删除,它只是想在其上添加另一条记录。我该如何解决这个问题
问候

【问题讨论】:

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


    【解决方案1】:

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

    更新:

    但是进行更新而不是删除和添加并不是更好。 只需获取记录并使用 try catch 更新它们,然后如果一切正常,则保存。

    希望对你有所帮助

    【讨论】:

    • 不会违反交易完整性。假设我们在添加记录之前保存并在添加记录时发现异常,我们不会在数据库级别处于不一致状态
    • 那么你应该使用更新而不是删除和添加。只需使用try catch 获取记录并更新它们,然后如果一切正常,请保存。希望这有帮助:)
    • 实际上要更新的记录是主详细信息,其中详细信息部分用户可以添加一些新记录,删除旧记录或两者都完成。所以,在这种情况下,我相信在删除后添加记录比检查旧记录更有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多