Я хочу пропустить цикл входящих записей, проверить свою базу данных, посмотреть, существуют ли они, добавить или обновить их по мере необходимости. У меня мало успеха.Entity Framework - обновление или добавление
var listOfClientAccounts = model.MTAccounts.ToList(); // single DB query
// for each of the users MTManager
foreach (var user in users)
{
var clientInDb = listOfClientAccounts
.SingleOrDefault(c => c.Login == user.Login); // runs in memory
var processedUser = ProcessUserRecord(user);
//Check if the Account Login is already in the database
if (clientInDb != null)
{
processedUser.MTAccountId = clientInDb.MTAccountId;
var entry = model.Entry(processedUser);
model.Entry(processedUser).CurrentValues.SetValues(processedUser);
entry.State = EntityState.Modified;
Console.WriteLine(x + " : UPDATE : " + processedUser.Login + "(" + clientInDb.MTAccountId + ")");
}
else
{
// Client does not exist add now
model.MTAccounts.Add(processedUser);
Console.WriteLine(x + " : ADD :" + processedUser.Login);
}
}
model.SaveChanges();
public MTAccount ProcessUserRecord(UserRecord user)
{
MTAccount DALUser = new MTAccount
{
BrokerServerId = 1,
Login = user.Login,
Group = user.Group
};
return DALUser;
}
Решающим является то, что я хочу, чтобы держать SaveChanges называют до конца цикла, так как может быть сотни записей, чтобы позвонить, и я не хочу, чтобы сделать сотни звонков дб.
есть ошибка выглядит следующим образом:
«CurrentValues» член не может быть вызван для объекта типа «MTAccount», так как объект не существует в контексте. Чтобы добавить объект в контекст, вызовите метод Add или Attach для DbSet.
и в чем проблема с кодом? –
Как вы структурировали это, не имеет значения, где вызывается SaveChanges, вы будете STILL делать сотни вызовов. Вам нужно выполнить вставку/обновление, которое не доступно изначально в EF и требует библиотек расширений. –
Какова ваша модель? Разумеется, вы просто берете модель и добавляете новую сущность или редактируете согласованный объект перед вызовом 'SaveChanges()' - что вы делаете? В чем проблема? – RemarkLima