代码之家  ›  专栏  ›  技术社区  ›  g_b

在调用SaveChanges之前检查添加的项目是否存在

  •  0
  • g_b  · 技术社区  · 8 年前

    如果房间名称尚不存在,我有此代码可以插入房间:

    private bool TryGetRoom(Room room, out int? roomId)
    {
        bool success = false;
        roomId = null;
        if (room != null)
        {
            // Check if room already exists
            var foundRoom = _context.Rooms.Where(rm => String.Equals(rm.Name, room.Name, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
            if (foundRoom == null)
            {
                // Create room
                var roomToAdd = _mapper.Map<dataModels.Room>(room);
                roomToAdd.CompanyId = _context.TenantId;
                _context.Add(roomToAdd);
    
                roomId = roomToAdd.Id;
                success = true;
            }
            else
            {
                roomId = foundRoom.Id;
                success = true;
            }
        }
        return success;
    }
    

    我的问题是这个函数在循环插入房间内调用。有时,循环中的项目具有相同的房间名称,我想即使我还没有调用SaveChanges,这一行:

    var foundRoom = _context.Rooms.Where(rm => String.Equals(rm.Name, room.Name, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
    

    将看到我之前添加的房间,即使循环完成后将调用SaveChanges。

    这不对吗?我当然可以创建一个变量来跟踪插入的项目,但我认为它会被上下文跟踪,它会看到我之前插入了一个有名称的房间?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Embri    8 年前

    在…内 _context.Rooms.Local 您可以找到添加/修改的实体,我认为这可能是您所需要的。

    有关本地数据的详细信息: http://www.entityframeworktutorial.net/EntityFramework4.3/local-data.aspx

    推荐文章