var DoesNotExist = this.db.Regions.Where(!m.Reports.Any(r => r.ReportId == m.ReportId)).ToList();
foreach (var item in DoesNotExist)
{
Report rpt = new Report { ReportId = item.ReportId, ReportDate = endDate };
this.db.Reports.AddObject(rpt);
foreach (var Point in this.db.RegionalData.Where(s => s.ReportId == item.ReportId && s.ReportDate == lastendDate))
{
if (this.db.RegionalData.Where(d => d.ReportId == Point.ReportId).Count() == 0)
{
StateData sd = new StateData
{
ReportDate = endDate,
ReportId = Point.ReportId,
Female = Point.Female,
Male = Point.Male,
Total = Point.Total,
};
this.db.RegionalData.AddObject(sd);
}
}
}
if (DoesNotExist.Count() != 0)
{
this.db.SaveChanges();
}
我有上面的代码检查某个Region的报告是否不存在,如果它们不存在,我会插入它们。
我遇到的问题是,如果两个用户在几秒钟内触发执行此代码,则会创建两个相同区域的报告,这会创建重复项,因为一个区域只能有一个报告。
我最好能解决这个问题吗?
我试着打电话
if (missingReportData.Count() != 0)
{
this.db.SaveChanges();
}
在this.db.Reports.AddObject(rpt);
之后,但问题仍然存在。
答案 0 :(得分:0)
我会通过添加一个唯一的索引来解决这个问题,该索引会阻止您为同一个区域插入两个报告。如果没有看到你的模型,很难说它是否应该是主键。
这样,如果已经有该区域的报告,数据库服务器将抛出异常。然后,您可以通过切换到更新或向用户显示错误来处理该异常。
答案 1 :(得分:0)
您也可以使用交易,但需要将EF4更新为EF6。