我有一个更新主详细记录的动作方法。当数据首次从视图到达控制器时,我从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中违反了唯一键约束。违反此约束的原因是以前的记录不会从数据库中删除,而只是想在其上添加另一条记录。我怎样才能解决这个问题呢
答案 0 :(得分:2)
那么为什么在添加新记录之前不要调用_SalesRepository.Save();
?
的更新强> 的
但最好不要删除和添加更新。 只需获取记录并使用try catch更新它们,然后如果一切正常就可以保存。
希望这有帮助