使用ADO.NET Entity Framework批量插入和更新

.net-3.5 bulkinsert c# entity-framework

我正在編寫一個執行大量Feed處理的小應用程序。我想使用LINQ EF,因為速度不是問題,它是一個單用戶應用程序,最後,每月只會使用一次。

我的問題圍繞使用LINQ EF進行批量插入的最佳方式。

在解析傳入的數據流之後,我最終得到了一個值列表。由於最終用戶可能最終嘗試導入一些重複數據,我想在插入期間“清理”數據而不是讀取所有記錄,執行for循環,拒絕記錄,然後最終導入餘數。

這就是我目前正在做的事情:

DateTime minDate = dataTransferObject.Min(c => c.DoorOpen);
DateTime maxDate = dataTransferObject.Max(c => c.DoorOpen);

using (LabUseEntities myEntities = new LabUseEntities())
{
    var recCheck = myEntities.ImportDoorAccess.Where(a => a.DoorOpen >= minDate && a.DoorOpen <= maxDate).ToList();
    if (recCheck.Count > 0)
    {
        foreach (ImportDoorAccess ida in recCheck)
        {
            DoorAudit da = dataTransferObject.Where(a => a.DoorOpen == ida.DoorOpen && a.CardNumber == ida.CardNumber).First();
            if (da != null)
                da.DoInsert = false;
        }
    }

    ImportDoorAccess newIDA;
    foreach (DoorAudit newDoorAudit in dataTransferObject)
    {
        if (newDoorAudit.DoInsert)
        {
            newIDA = new ImportDoorAccess
            {
                CardNumber = newDoorAudit.CardNumber,
                Door = newDoorAudit.Door,
                DoorOpen = newDoorAudit.DoorOpen,
                Imported = newDoorAudit.Imported,
                RawData = newDoorAudit.RawData,
                UserName = newDoorAudit.UserName
            };
            myEntities.AddToImportDoorAccess(newIDA);
        }
    }
    myEntities.SaveChanges();
}

我也收到了這個錯誤:

System.Data.UpdateException未處理
Message =“無法更新EntitySet'ImportDoorAccess',因為它有一個DefiningQuery,元素中不存在支持當前操作的元素。”
來源=“System.Data.SqlServerCe.Entity”

我究竟做錯了什麼?

任何指針都是受歡迎的。

一般承認的答案

您可以通過這種方式進行多次插入。

我已經看到了在未正確設置模型(EDMX)的情況下遇到的異常。您要么沒有該表上的主鍵(EF術語中的EntityKey),要么設計者試圖猜測EntityKey應該是什麼。在後一種情況下,您將在EDM Designer中看到兩個或多個屬性,旁邊有按鍵。

確保ImportDoorAccess表具有單個主鍵並刷新模型。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因