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
}