使用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表具有单个主键并刷新模型。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因