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

时间:2018-03-27 07:41:09

标签: entity-framework entity-framework-core

如果房间名称不存在,我有这个代码插入房间:

write-host ('[INFO].['+$(Get-TimeStamp)+'] Message')
---> [INFO].[20183327_033349] Message

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

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。

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

1 个答案:

答案 0 :(得分:1)

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

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