0
我有這樣的方法,節省了與其相關的項目(多對一對多的關係)的實體,在調用SaveChanges()之前,添加或更新foreach循環中的實體需要很長時間?
private static void Save<T>(TbCommonHistoryLog log, List<T> lstDetails) where T : IHasSerial
{
foreach (var item in lstDetails.OrderBy(x => x.Serial))
{
var ser = SerializeObject(item);
var record = oContext.TbHistoryLog_Lists.FirstOrDefault(x => x.ListObjectJson == ser);
if (record == null) //add new list item
{
TbCommonHistoryLog_Lists listObject = new TbCommonHistoryLog_Lists()
{
ListObjectJson = SerializeObject(item)
};
var details = new TbCommonHistoryLogDetails { TbHistoryLog = log, TbHistoryLog_Lists = listObject };
oContext.TbHistoryLogDetails.Add(details);
}
else //attach an existing list item
{
var o = oContext.TbHistoryLog_Lists.Find(record.Id);
oContext.TbHistoryLog_Lists.Attach(o);
var details = new TbCommonHistoryLogDetails { TbHistoryLog = log, TbHistoryLog_Lists = o };
oContext.TbHistoryLogDetails.Add(details);
}
}
oContext.BulkSaveChanges();
}
我有兩個表:TbCommonHistoryLog
,TbCommonHistoryLog_Lists
,這是多對多的關係,結合表是TbCommonHistoryLogDetails
, 我在這裏做的是一個主 - 細節模型的審計,所有的審計都被序列化爲DB中的JSON,我將頭對象保存在TbCommonHistoryLog
表中,並且每個列表項在TbHistoryLog_Lists
表中,方法上面我檢查列表項是否已經存在於數據庫中,以避免重複。 但這個過程需要超過15秒,這是一個很長的時間,我不明白我在這裏做錯了什麼..請幫助嗎?