C# 在实体框架6.1中保存更改之前检查是否存在

C# 在实体框架6.1中保存更改之前检查是否存在,c#,entity-framework-6,unique-constraint,C#,Entity Framework 6,Unique Constraint,我需要处理来自外部系统的文本文件。我的代码(C#)如下所示: foreach (var parsedFileLine in parsedFileData) { var container = context.Containers .FirstOrDefault(c => c.Label == parsedFileLine.ccoid); if (container == null) { container = context.Cont

我需要处理来自外部系统的文本文件。我的代码(C#)如下所示:

foreach (var parsedFileLine in parsedFileData)
{
    var container = context.Containers
        .FirstOrDefault(c => c.Label == parsedFileLine.ccoid);
    if (container == null)
    {
        container = context.Containers.Create();
        container.Label = parsedFileLine.ccoid;
        // More initialization logic
        ...
        context.Containers.Insert(container);
    }
    // Some more processing
    ...
}
context.SaveChanges();
DB在标签列上具有唯一的约束。如果我收到一个文件,每个容器有一行,那么一切正常。但是,当我收到一个包含2+行引用新容器的文件时,我得到了一个违例

问题是,我对第二行文件的存在性检查失败(因为尚未调用SaveChanges,因此尚未在数据库中创建新容器),因此我尝试再次创建容器。提交更改时,DB会抛出异常,因为我试图插入两个具有相同标签的行

我首先想到使用Find(),但由于这是一个新实体,所以我没有要搜索的键。将SaveChanges放入循环中也不是一个选项,因为我需要对文件进行事务处理。由于涉及的工作量,将PK更改为标签不是一个选项


关于如何解决这个问题有什么想法吗?

一个可能的解决方案是编写一个预处理方法

此方法将包含您当前的DB容器值,以及另一个存储刚刚添加的容器值的tempContainer。 插入前检查两个容器

List MyDBList;
List MyTempList;

Foreach(item)
{
  checkMyDBList(item);
  checkMyTempList(item);

  if(checkbothlist)
  MyTempList.add(item);
}
add MyTempList to MyDBList
save MyDBList