1
我有更新主細節記錄的操作方法。當數據首次從視圖到控制器時,我從db中選擇以前的記錄並調用存儲庫的delete方法。Linq to Sql在同一事務中添加和刪除
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();
}
但保存被調用時,它給我的異常,告訴唯一鍵約束被侵犯D b。這個約束被違反的原因是以前的記錄不會從數據庫中刪除,而只是想在其上添加另一條記錄。我該如何解決這個問題
關於
它不會違反交易的完整性。假設我們在保存之前添加了記錄,並且在添加記錄時我們發現異常,我們不會在db級別處於不一致的狀態 – 2011-03-31 15:21:39
然後您應該使用Update而不是刪除並添加。只需獲取記錄並使用'try catch'全部更新它們,然後如果一切正常都可以保存。希望這有助於:) – 2011-03-31 17:06:51
實際上要更新的記錄是主詳細信息,詳細信息部分用戶可能已添加一些新記錄,刪除舊記錄或完成了這兩項操作。所以,在這種情況下,我相信刪除後添加記錄更有意義,然後檢查舊記錄 – 2011-03-31 19:26:57