Linq-запрос на DBSet не собирает вновь добавленные записи

У меня есть следующий кусок кода, чтобы проверить, существует ли запись в DBSet и, если нет, чтобы добавить ее.

Поскольку в цикле есть несколько похожих записей, он будет пытаться добавить одни и те же данные более одного раза, что оператор linq (сразу после уже установленного) должен подобрать и остановить, но по какой-то причине он не может обнаружить вновь добавленные записи и поэтому добавит их несколько раз.

Есть идеи?

foreach (var user in userList.Split(','))
{
    var valueFound = false;
    var user1 = user;
    var defRecord = definitionRecord.Id;

    foreach (var valueRecord in this._mps3Context.RefProviderLoginValues.Where(x => user1 == x.UserId))
    {
        bool alreadyInserted = this._mps3Context.RefProviderLoginValues.Any(
                                    x => x.DefinitionId == defRecord && x.UserId == valueRecord.UserId); // Check we have not already inserted this data

        if (alreadyInserted || valueRecord.DefinitionId != definitionRecord.Id)
        {
            continue;
        }

        valueFound = true;
        break;
    }

    if (valueFound)
    {
        continue;
    }

    //// Since the there's no existing record, create it
    var newLoginValueRecord = new RefProviderLoginValues
    {
        CreatedById = this._currentUser.UserId,
        CreatedDate = DateTime.Now,
        ModifiedById = this._currentUser.UserId,
        ModifiedDate = DateTime.Now,
        UserId = user1,
        DefinitionId = definitionRecord.Id,
        Value = this.CheckEncryptionRequired(definitionRecord.Default, refLoginDefinition.Encrypted ?? false)
    };

    this.RefProviderLoginValues.Add(newLoginValueRecord); // Add entity to context
}

0 ответов

Другие вопросы по тегам