2017-02-20 72 views
0

背景信息防止重複插入到SQL數據庫,必須使用PetaPoco

我目前工作的一個電子郵件爬行,這將使在我所抓取的信息電子郵件的數據庫記錄。目前我的公司已經限制我使用Petapoco進行代碼維護問題。我正在運行的當前問題是記錄到數據庫中的重複記錄。我一直在尋找可以給我提示如何實現這一點的示例或文檔,但我一直沒有找到任何。

問題

目前我能記錄插入到數據庫與出一個問題,但它也插入重複也。

信息

我想,以確保是獨一無二的列是[AppointmentUniqueId],我有ID的主鍵,我的表是AppointmentActivities,而我試圖插入一個一個記錄的類模型。

目前代碼

public static async Task<bool> InsertActivitiesData(List<Act_Appointments> recordList) 
{ 
    int recordsInserted = 0; 
    try 
    { 
     using (PetaPoco.Database databaseInstance = new PetaPoco.Database("PMconString")) 
     { 
      foreach (var record in recordList) 
      { 
       databaseInstance.Insert("AppointmentActivities", "Id", record); 
       recordsInserted++; 
      } 
     } 
     log4net.LogManager.GetLogger("AppInfoLogger").Info("[ ServiceRan : Insert Email Data To DB ]" + "[ Records Inserted: " + recordsInserted.ToString() + " ]"); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     log4net.LogManager.GetLogger("AppErrorLogger").Error("[ReconcileEvents]" + JsonConvert.SerializeObject(ex)); 
     log4net.LogManager.GetLogger("EmailLogger").Error("[ReconcileEvents]" + JsonConvert.SerializeObject(ex)); 
     return false; 
    } 
} 

回答

0

嗯,我把最實用的方式進入這個問題。我不確定它是否是最有效率的,但由於時間的限制,我實在無法在這個問題上長篇大論。我繼續在AppointmentUniqueId上運行一個查詢,如果它返回null,則表示該項不存在。

public static async Task<bool> InsertActivitiesData(List<Act_Appointments> recordList) 
    { 
     int recordsInserted = 0; 
     int duplicates = 0; 
     try 
     { 
      using (PetaPoco.Database databaseInstance = new PetaPoco.Database("PMconString")) 
      {     
       foreach (var record in recordList) 
       { 

        if (databaseInstance.FirstOrDefault<Act_Appointments>("SELECT * FROM AppointmentActivities WHERE AppointmentUniqueId [email protected]", record.AppointmentUniqueId) == null) 
        { 
         databaseInstance.Insert("AppointmentActivities", "Id", record); 
         recordsInserted++; 
        } 
        else 
        { 
         duplicates++; 
        }            
       } 
      } 
      log4net.LogManager.GetLogger("AppInfoLogger").Info("[Insert Appointment Data To DB]" + "[ Records Inserted: " + recordsInserted.ToString() + " ]"+ "[ Duplicates Not Inserted: " + duplicates.ToString() + " ]"); 
      return true; 
     } 
     catch (Exception ex) 
     { 
      log4net.LogManager.GetLogger("AppErrorLogger").Error("[ReconcileEvents]" + JsonConvert.SerializeObject(ex)); 
      log4net.LogManager.GetLogger("EmailLogger").Error("[ReconcileEvents]" + JsonConvert.SerializeObject(ex)); 
      return false; 
     } 
    } 

PS。

爲了聽到來自社區的反饋,並且看看我是否嘗試過不同的方法,我會保持這個開放10天。