【问题标题】:Check for existence before SaveChanges in Entity Framework 6.1在实体框架 6.1 中的 SaveChanges 之前检查是否存在
【发布时间】:2015-12-05 00:49:17
【问题描述】:

我需要处理来自外部系统的文本文件。我的代码 (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 对 Label 列有唯一约束。如果我收到一个每个容器都有一行的文件,那么一切正常。但是,当我收到一个包含 2 行以上引用一个新容器的文件时,我会收到一个违例。

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

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

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: c# entity-framework-6 unique-constraint


    【解决方案1】:

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

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

    List MyDBList;
    List MyTempList;
    
    Foreach(item)
    {
      checkMyDBList(item);
      checkMyTempList(item);
    
      if(checkbothlist)
      MyTempList.add(item);
    }
    add MyTempList to MyDBList
    save MyDBList
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多